メインコンテンツまでスキップ

テナント

テナントは A2Flow の最上位の区切りです。ほとんどのレコードはちょうど 1 つのテナントに属し、ごく一部だけが意図的にその上に立ちます。そしてリクエストがテナントをまたぐことはありません。テナントのレコード自体を作ったり編集したりするのは管理作業なので、テナントを参照してください。このページで扱うのは、その境界がほかのすべてにとって何を意味するか、です。

何がテナントに属するか​

範囲そこにあるもの
テナントに属するエージェントスキル、ワークフローとその設計セッション、タスクテンプレート、ワークフロー実行とそのワークフローセッション、承認、シークレット、MCP サーバー、ツールモック、タグ、ユーザーグループ、そしてほとんどのユーザー
プラットフォームに属するテナントのレコード自体、システム設定、スーパー管理者のアカウント、初期投入されるシステムユーザー

ユーザーが属するテナントは高々 1 つです。ユーザーグループはちょうど 1 つに属します。だからグループが super_admin を付与することはできません。この役割はそもそもプラットフォーム全体のものだからです(実効ロールを参照)。初回起動時には Default テナントが投入され、初期の admin ユーザーがそこに入ります。初期の root ユーザーはプラットフォーム全体を対象とし、テナントを持ちません。

テナント境界​

テナントに属する読み書きは、すべて呼び出し元のテナントの中で解決されます。ほかのテナントにしか存在しないレコードは HTTP 404 で返ります。403 ではありません。境界は存在を知らせるのではなく、隠すためにあるからです。これは URL に打ち込んだワークフロー ID でも、API に渡した ID でも同じで、テナントをまたいだ参照がレコードの実在を裏づけることは決してありません。

例外的に、レコードを返しもせず存在しないふりもしない読み取りが 1 つだけあります。名前の一括解決です。POST /api/v1/users/resolve-names は呼び出し元のテナント外のユーザーを応答から落とすので、UI は ID をそのまま表示します。ただし、どのテナントの中にもレコードを持ちうる 2 種類のアカウントにはラベルを付けます。名前をまとめて解決するを参照してください。

テナントとして振る舞う​

プラットフォーム全体を対象とするスーパー管理者は自分のテナントを持ちませんが、見るべきものはたいていどこかのテナントに属しています。そこでアプリのヘッダーにテナント切り替えがあり、スーパー管理者にだけ表示されて、どのテナントとして振る舞うかを選べます。選択は再読み込みをまたいで記憶され、管理画面もチャットも含めてどこにでも適用されます。テナントを選んでいない状態では、テナント単位のリクエストは HTTP 403 で拒否されます。

テナントを切り替えてもロールは変わりません。どのテナントを選んでいても、スーパー管理者はロールのゲートを素通りします。

この切り替えが出るのは、自分のテナントを持たない呼び出し元だけです。テナントに属するユーザーは常に自分のテナントに閉じます。切り替えが送る X-Tenant-Id ヘッダーは、そうしたユーザーに対しては完全に無視されるので、手で付けても何も得られません。クライアント側から境界を抜け出す方法はありません。

全テナント​

切り替えには全テナントという選択肢もあります。読み取り専用の管理一覧・詳細ページで、全テナントのデータを一度に閲覧できます。有効にすると、これらのページには一番左の列としてテナント列(と対応するフィールド)が増え、別テナントの行を区別できます。

ほかのユーザーを代理操作している間は、全テナントの選択は一時的に外れます。そのユーザー自身のテナントを選んだのと同じ表示になり、テナント列は出ません。代理操作をやめるとまた有効になります。

選択読み取り書き込みチャット履歴エージェント
自テナント(暗黙。テナントに属するユーザー)自テナント自テナント自テナント✅
1 つのテナント(スーパー管理者)そのテナントそのテナントそのテナント✅
全テナント(スーパー管理者)全テナント❌ 403全テナント❌ 403
未選択(スーパー管理者)❌ 403❌ 403❌ 403❌ 403

「チャット履歴」は GET /workflows/{id}/messages と GET /workflow-executions/{id}/messages です。スーパー管理者が他テナントのワークフローや実行を確認するときは、その会話も読めます。これらのチャットを動かすエージェントのエンドポイント(POST .../agent)は書き込みなので、常に具体的なテナントを 1 つ選んでいる必要があります。全テナントを選んでいるとき、ワークフロー ID はテナントに関係なく解決されるので、そこでは設計セッション自身のロールチェックがテナント境界の代わりを務めます。設計セッションを参照してください。