[{"data":1,"prerenderedAt":803},["ShallowReactive",2],{"navigation":3,"doc-/modules/tenant-membership":217,"docs-all-paths":749},[4,19,39,63,87,111,127,195,211],{"title":5,"path":6,"stem":7,"children":8},"Welcome","/welcome","01.welcome",[9,11,15],{"title":5,"path":6,"stem":10},"01.welcome/index",{"title":12,"path":13,"stem":14},"Astar とは（5分）","/welcome/product-in-5-min","01.welcome/01.product-in-5-min",{"title":16,"path":17,"stem":18},"事業文脈","/welcome/business-context","01.welcome/02.business-context",{"title":20,"path":21,"stem":22,"children":23},"Getting Started","/getting-started","02.getting-started",[24,27,31,35],{"title":25,"path":21,"stem":26},"はじめかた","02.getting-started/index",{"title":28,"path":29,"stem":30},"リポジトリ取得と環境構築","/getting-started/repo-setup","02.getting-started/01.repo-setup",{"title":32,"path":33,"stem":34},"日々の開発ループ","/getting-started/dev-loop","02.getting-started/02.dev-loop",{"title":36,"path":37,"stem":38},"検証の 4 層","/getting-started/verification-tiers","02.getting-started/03.verification-tiers",{"title":40,"path":41,"stem":42,"children":43},"Architecture","/architecture","03.architecture",[44,47,51,55,59],{"title":45,"path":41,"stem":46},"アーキテクチャ","03.architecture/index",{"title":48,"path":49,"stem":50},"マルチテナンシーと RLS","/architecture/multi-tenancy-rls","03.architecture/01.multi-tenancy-rls",{"title":52,"path":53,"stem":54},"認可モデル","/architecture/authorization","03.architecture/02.authorization",{"title":56,"path":57,"stem":58},"AI サブシステム","/architecture/ai-subsystem","03.architecture/03.ai-subsystem",{"title":60,"path":61,"stem":62},"データモデル","/architecture/data-model","03.architecture/04.data-model",{"title":64,"path":65,"stem":66,"children":67},"Backend","/backend","04.backend",[68,71,75,79,83],{"title":69,"path":65,"stem":70},"バックエンド","04.backend/index",{"title":72,"path":73,"stem":74},"層構造","/backend/layering","04.backend/01.layering",{"title":76,"path":77,"stem":78},"規約","/backend/conventions","04.backend/02.conventions",{"title":80,"path":81,"stem":82},"テスト","/backend/testing","04.backend/03.testing",{"title":84,"path":85,"stem":86},"マイグレーション","/backend/migrations","04.backend/04.migrations",{"title":88,"path":89,"stem":90,"children":91},"Frontend","/frontend","05.frontend",[92,95,99,103,107],{"title":93,"path":89,"stem":94},"フロントエンド","05.frontend/index",{"title":96,"path":97,"stem":98},"モジュール内部構造","/frontend/module-anatomy","05.frontend/01.module-anatomy",{"title":100,"path":101,"stem":102},"API アクセスの一本道","/frontend/api-access-chain","05.frontend/02.api-access-chain",{"title":104,"path":105,"stem":106},"i18n","/frontend/i18n","05.frontend/03.i18n",{"title":108,"path":109,"stem":110},"デザインシステム","/frontend/design-system","05.frontend/04.design-system",{"title":112,"path":113,"stem":114,"children":115},"Go Agent And Cli","/go-agent-and-cli","06.go-agent-and-cli",[116,119,123],{"title":117,"path":113,"stem":118},"Go agent と CLI","06.go-agent-and-cli/index",{"title":120,"path":121,"stem":122},"Go agent","/go-agent-and-cli/go-agent","06.go-agent-and-cli/01.go-agent",{"title":124,"path":125,"stem":126},"CLI","/go-agent-and-cli/cli","06.go-agent-and-cli/02.cli",{"title":128,"path":129,"stem":130,"children":131},"Modules","/modules","07.modules",[132,135,139,143,147,151,155,159,163,167,171,175,179,183,187,191],{"title":133,"path":129,"stem":134},"モジュール","07.modules/index",{"title":136,"path":137,"stem":138},"テーブル","/modules/table","07.modules/01.table",{"title":140,"path":141,"stem":142},"ドキュメントツリー","/modules/document","07.modules/02.document",{"title":144,"path":145,"stem":146},"AIチャット","/modules/ai","07.modules/03.ai",{"title":148,"path":149,"stem":150},"認証・権限","/modules/auth","07.modules/04.auth",{"title":152,"path":153,"stem":154},"AI取込","/modules/organize","07.modules/05.organize",{"title":156,"path":157,"stem":158},"ストレージ","/modules/storage","07.modules/06.storage",{"title":160,"path":161,"stem":162},"NAS同期","/modules/sync","07.modules/07.sync",{"title":164,"path":165,"stem":166},"ワークスペース","/modules/workspace","07.modules/08.workspace",{"title":168,"path":169,"stem":170},"テナントとメンバーシップ","/modules/tenant-membership","07.modules/09.tenant-membership",{"title":172,"path":173,"stem":174},"検索","/modules/search","07.modules/10.search",{"title":176,"path":177,"stem":178},"表示ビュー","/modules/display","07.modules/11.display",{"title":180,"path":181,"stem":182},"テンプレート","/modules/template","07.modules/12.template",{"title":184,"path":185,"stem":186},"メール","/modules/mail","07.modules/13.mail",{"title":188,"path":189,"stem":190},"電話","/modules/phone","07.modules/14.phone",{"title":192,"path":193,"stem":194},"リアルタイム","/modules/realtime","07.modules/15.realtime",{"title":196,"path":197,"stem":198,"children":199},"Infra And Deploy","/infra-and-deploy","08.infra-and-deploy",[200,203,207],{"title":201,"path":197,"stem":202},"インフラとデプロイ","08.infra-and-deploy/index",{"title":204,"path":205,"stem":206},"環境の種類","/infra-and-deploy/environments","08.infra-and-deploy/01.environments",{"title":208,"path":209,"stem":210},"セルフホスト構成","/infra-and-deploy/self-host","08.infra-and-deploy/02.self-host",{"title":212,"path":213,"stem":214,"children":215},"docs-map","/docs-map","09.docs-map/index",[216],{"title":212,"path":213,"stem":214},{"id":218,"title":168,"body":219,"description":743,"extension":744,"meta":745,"navigation":746,"path":169,"seo":747,"stem":170,"__hash__":748},"docs/07.modules/09.tenant-membership.md",{"type":220,"value":221,"toc":726},"minimark",[222,225,229,255,258,343,347,355,393,400,442,449,486,490,495,663,666,707],[223,224,168],"h1",{"id":168},[226,227,228],"h2",{"id":228},"一言でいうと",[230,231,232,233,237,238,241,242,245,246,249,250,254],"p",{},"frontend の ",[234,235,236],"code",{},"app/modules/tenant/"," は「テナント設定画面」というひとつの UI のまとまりだが、その裏側は backend の複数モジュールに分かれている。メンバー招待・参加/離脱は ",[234,239,240],{},"membership","、テナント名・ブランディング・プレゼンテーション設定は ",[234,243,244],{},"tenant","、AI クレジット・プラン選択は ",[234,247,248],{},"billing"," が担当する（",[251,252,253],"a",{"href":129},"モジュール索引"," の対応表注記参照）。「テナント設定を触る」タスクでは、まず自分が触ろうとしているのがどの backend モジュールの領域かを見極める必要がある。",[226,256,257],{"id":257},"主要ドメイン概念",[259,260,261,277],"table",{},[262,263,264],"thead",{},[265,266,267,271,274],"tr",{},[268,269,270],"th",{},"概念",[268,272,273],{},"役割",[268,275,276],{},"主対応 backend モジュール",[278,279,280,299,313,331],"tbody",{},[265,281,282,288,295],{},[283,284,285],"td",{},[234,286,287],{},"TenantMembership",[283,289,290,291,294],{},"ユーザー×テナントの所属関係（Slack式に1ユーザーが複数テナントに所属可）。",[234,292,293],{},"isActive"," で参加/離脱を表す",[283,296,297],{},[234,298,240],{},[265,300,301,306,309],{},[283,302,303],{},[234,304,305],{},"TenantInvitation",[283,307,308],{},"メール招待。トークン付きURL、期限切れ、承諾/拒否の状態遷移を持つ",[283,310,311],{},[234,312,240],{},[265,314,315,320,327],{},[283,316,317],{},[234,318,319],{},"Tenant",[283,321,322,323,326],{},"テナント本体。名前・ブランディング・",[234,324,325],{},"RoleKind","・プレゼンテーション（テーマ/レイアウト）・有効プラグイン一覧を持つ",[283,328,329],{},[234,330,244],{},[265,332,333,336,339],{},[283,334,335],{},"AI クレジット / プラン",[283,337,338],{},"テナットのAI利用量課金、Stripe連携",[283,340,341],{},[234,342,248],{},[226,344,346],{"id":345},"backend-構造","Backend 構造",[348,349,351,354],"h3",{"id":350},"coremembership招待所属",[234,352,353],{},"core/membership/","（招待・所属）",[356,357,358,377],"ul",{},[359,360,361,364,365,368,369,372,373,376],"li",{},[234,362,363],{},"api/controller/",": ",[234,366,367],{},"TenantInvitationController","（テナント管理者側の招待発行・取消）、",[234,370,371],{},"InvitationSelfServiceController","（招待された本人が自分のメールアドレス宛の招待を確認・承諾/拒否する自己完結フロー）、",[234,374,375],{},"TenantMembershipController","（所属一覧・離脱）",[359,378,379,364,382,385,386,389,390],{},[234,380,381],{},"domain/service/",[234,383,384],{},"TenantInvitationService","（招待作成→メール送信、招待の承諾/拒否、期限切れバッチ処理 ",[234,387,388],{},"expireOldInvitations","）、",[234,391,392],{},"TenantMembershipService",[348,394,396,399],{"id":395},"coretenantテナント本体platform-admin",[234,397,398],{},"core/tenant/","（テナント本体・platform-admin）",[356,401,402,417],{},[359,403,404,364,406,409,410,413,414,416],{},[234,405,363],{},[234,407,408],{},"TenantController","（テナント設定 CRUD — 名前・ブランディング・プレゼンテーション・有効プラグイン）、",[234,411,412],{},"PlatformTenantAdminController","（運営者向けテナント横断操作、",[251,415,253],{"href":129}," の backend-only 節参照）",[359,418,419,364,421,424,425,428,429,428,432,428,435,428,438,441],{},[234,420,381],{},[234,422,423],{},"TenantService","（",[234,426,427],{},"createTenant","・",[234,430,431],{},"updateBranding",[234,433,434],{},"updatePresentation",[234,436,437],{},"updateEnabledPlugins",[234,439,440],{},"transferOwnership"," など）",[348,443,445,448],{"id":444},"corebillingaiクレジットプラン",[234,446,447],{},"core/billing/","（AIクレジット・プラン）",[356,450,451,470],{},[359,452,453,364,455,428,458,428,461,428,464,428,467],{},[234,454,363],{},[234,456,457],{},"TenantBillingController",[234,459,460],{},"BillingPlanController",[234,462,463],{},"CreditPackController",[234,465,466],{},"CheckoutController",[234,468,469],{},"StripeWebhookController",[359,471,472,364,474,428,477,428,480,428,483],{},[234,473,381],{},[234,475,476],{},"BillingService",[234,478,479],{},"TenantUsageMeteringService",[234,481,482],{},"PlanFeatureChecker",[234,484,485],{},"StripeProvisioningService",[226,487,489],{"id":488},"frontend-構造","Frontend 構造",[230,491,492,494],{},[234,493,236],{}," は上記3つの backend モジュールをまとめて叩く単一の UI モジュール。",[356,496,497,539,588,637],{},[359,498,499,364,502,505,506,509,510,512,513,516,517,505,520,505,523,526,527,505,530,533,534,512,536],{},[234,500,501],{},"components/",[234,503,504],{},"InviteMemberDialog.vue"," / ",[234,507,508],{},"InvitationList.vue","（招待、",[234,511,240],{}," 対応）、",[234,514,515],{},"TenantMemberList.vue"," + ",[234,518,519],{},"MemberListItem.vue",[234,521,522],{},"MemberActionMenu.vue",[234,524,525],{},"EditMemberRolesDialog.vue","（所属メンバー管理）、",[234,528,529],{},"TenantForm.vue",[234,531,532],{},"TenantSettingsDialog.vue","（テナント設定、",[234,535,244],{},[234,537,538],{},"TransferOwnershipDialog.vue",[359,540,541,364,544,547,548,547,551,547,554,547,557,547,560,516,563,566,567,512,569,505,572,505,575,578,579,505,582,547,585],{},[234,542,543],{},"components/settings/",[234,545,546],{},"TenantSettingsForm.vue","、",[234,549,550],{},"TenantBrandingForm.vue",[234,552,553],{},"TenantPresentationForm.vue",[234,555,556],{},"TenantRoleKindForm.vue",[234,558,559],{},"TenantDangerZone.vue",[234,561,562],{},"TenantAICreditsScreen.vue",[234,564,565],{},"AICreditHistorySheet.vue","（AIクレジット、",[234,568,248],{},[234,570,571],{},"TenantAiDefaultSelector.vue",[234,573,574],{},"TenantAiSttSection.vue",[234,576,577],{},"TenantAiTierModelSelector.vue","（AI設定）、",[234,580,581],{},"TenantProviderSetupForm.vue",[234,583,584],{},"TenantCliSetupForm.vue",[234,586,587],{},"TenantPluginSettingsForm.vue",[359,589,590,364,593,505,596,505,599,547,602,505,605,547,608,505,611,505,614,547,617,505,620,547,623,505,626,424,629,512,631,505,634],{},[234,591,592],{},"composables/",[234,594,595],{},"useTenantMembers",[234,597,598],{},"useMemberDisplay",[234,600,601],{},"useMemberRoleCache",[234,603,604],{},"useTenantInvitations",[234,606,607],{},"useMyTenantInvitations",[234,609,610],{},"useTenants",[234,612,613],{},"useTenantListQuery",[234,615,616],{},"useTenantOwnership",[234,618,619],{},"useTenantSettings",[234,621,622],{},"useTenantPresentation",[234,624,625],{},"useAICredits",[234,627,628],{},"useAIConfiguration",[234,630,248],{},[234,632,633],{},"usePlugins",[234,635,636],{},"usePluginSettings",[359,638,639,364,642,505,645,547,648,547,651,547,654,547,657,547,660],{},[234,640,641],{},"repositories/",[234,643,644],{},"TenantRepository",[234,646,647],{},"TenantsRepository",[234,649,650],{},"TenantMemberRepository",[234,652,653],{},"TenantInvitationRepository",[234,655,656],{},"TenantPresentationRepository",[234,658,659],{},"AICreditsRepository",[234,661,662],{},"AIConfigurationRepository",[226,664,665],{"id":665},"他モジュールとの辺",[356,667,668,686,697],{},[359,669,670,505,673,676,677,679,680,682,683,685],{},[234,671,672],{},"auth",[234,674,675],{},"role",": メンバーのロール割り当て・権限判定は ",[234,678,672],{}," モジュール（Discord式権限モデル）が持つ。",[234,681,244],{}," はロールの「種類」（",[234,684,325],{},"）の設定のみ持つ",[359,687,688,364,691,693,694,696],{},[234,689,690],{},"user",[234,692,287],{}," はユーザープロフィール（",[234,695,690],{}," モジュール）と紐づく",[359,698,699,702,703,706],{},[234,700,701],{},"notification",": 招待承諾時に通知が作成される（",[234,704,705],{},"TenantInvitationService.createAcceptanceNotification","）",[708,709,711],"callout",{"type":710},"warning",[230,712,713,714,716,717,719,720,722,723,725],{},"「テナント設定を直す」という依頼を frontend ",[234,715,244],{}," モジュール1つの改修だと思い込むと、実装先の backend モジュールを間違える。メンバー管理・招待なら ",[234,718,240],{},"、名前/ブランディング/プレゼンテーションなら ",[234,721,244],{},"、AIクレジット/プランなら ",[234,724,248],{}," — 触る画面のどの節（招待セクションか設定フォームかAIクレジット画面か）かを先に特定してから backend 側の対応 controller/service を探すこと。",{"title":727,"searchDepth":728,"depth":728,"links":729},"",2,[730,731,732,741,742],{"id":228,"depth":728,"text":228},{"id":257,"depth":728,"text":257},{"id":345,"depth":728,"text":346,"children":733},[734,737,739],{"id":350,"depth":735,"text":736},3,"core/membership/（招待・所属）",{"id":395,"depth":735,"text":738},"core/tenant/（テナント本体・platform-admin）",{"id":444,"depth":735,"text":740},"core/billing/（AIクレジット・プラン）",{"id":488,"depth":728,"text":489},{"id":665,"depth":728,"text":665},"招待とテナント設定。backend core/membership + core/tenant ⇄ frontend app/modules/tenant の深掘り。frontend tenant が複数 backend モジュールを束ねるハブである点を扱う。","md",{},true,{"title":168,"description":743},"R6bzBOMe5V8Zh5RBMYJFO5JEkCfhgk0VK5tMTr0OegA",[750,752,753,755,756,757,758,759,760,761,762,763,765,766,767,768,769,771,772,773,774,775,777,779,781,782,783,784,785,786,787,788,789,790,791,792,793,794,795,796,797,798,799,800,801],{"path":13,"title":751},"Astar とは何か（5分で）",{"path":17,"title":16},{"path":6,"title":754},"ようこそ",{"path":29,"title":28},{"path":33,"title":32},{"path":37,"title":36},{"path":21,"title":25},{"path":49,"title":48},{"path":53,"title":52},{"path":57,"title":56},{"path":61,"title":60},{"path":41,"title":764},"システムアーキテクチャ",{"path":73,"title":72},{"path":77,"title":76},{"path":81,"title":80},{"path":85,"title":84},{"path":65,"title":770},"バックエンドガイド",{"path":97,"title":96},{"path":101,"title":100},{"path":105,"title":104},{"path":109,"title":108},{"path":89,"title":776},"フロントエンドガイド",{"path":121,"title":778},"Go agent — NAS 同期エージェント",{"path":125,"title":780},"astar CLI",{"path":113,"title":117},{"path":137,"title":136},{"path":141,"title":140},{"path":145,"title":144},{"path":149,"title":148},{"path":153,"title":152},{"path":157,"title":156},{"path":161,"title":160},{"path":165,"title":164},{"path":169,"title":168},{"path":173,"title":172},{"path":177,"title":176},{"path":181,"title":180},{"path":185,"title":184},{"path":189,"title":188},{"path":193,"title":192},{"path":129,"title":253},{"path":205,"title":204},{"path":209,"title":208},{"path":197,"title":201},{"path":213,"title":802},"docs/ 地図",1785452455413]