運用
DB レコードを操作することでシステムの挙動を制御する設定項目です。
予約済みテナントコード
blocked_tenant_codes テーブルで管理します。登録されたコードはテナント作成時に使用不可となります。
初期データ(api・admin・www などのシステム予約語)はマイグレーション実行時に自動投入されます。
追加する場合は直接レコードを挿入します。
INSERT INTO blocked_tenant_codes (code) VALUES ('myword');登録時のプランの規則
registration_plan_rules テーブルで管理します。運営画面の「申込・契約 > 登録時のプラン」から登録・編集します。
申込みフォーム(POST /api/public/tenants)から登録したテナントは、通常はトライアルのプランで登録します。規則に合ったテナントは、トライアルの代わりに規則のプランで登録します。
- 有効な規則を
priorityの小さい順(同じなら作った順)に見て、最初に合った規則を使います。どれにも合わなければトライアルです。 - 1つの規則の中では、値が入っている条件をすべて満たしたときだけ合います(空の条件は見ません)。条件が1つも無い規則は保存できません。
- 規則のプランが有効(
ACTIVE)でないときは、その規則を飛ばして次の規則を見ます。 - トライアル以外のプランは、契約の変更(
SubscriptionService::createSubscription())と同じく月末まで・自動更新で登録します。Senter にもそのプランで利用を登録します。 - 規則で決まったときは、操作ログに
TENANT_REGISTER_WITH_PLAN_RULE(metadata に規則とプラン)を残します。運営のログにだけ出ます。 - 運営画面からのテナントの作成と、パートナー経由の申込みには使いません(どちらもプランを人が選ぶため)。
- 規則を変えても、すでに登録したテナントのプランは変わりません。
| カラム | 説明 |
|---|---|
name | 運営が見分けるための名前 |
plan_id | 規則に合ったときに付けるプラン |
tenant_code_prefix | 条件: テナントコードの先頭(大文字と小文字は区別しない。保存時に小文字にそろえる) |
partner_id | 条件: 紹介元のパートナー(申込みフォームの代理店契約コードで決まる tenants.partner_id) |
priority | 評価する順(小さいものから) |
status | ACTIVE(有効)/ INACTIVE(停止中) |
テナントコードだけの条件
テナントコードは申し込む人が自由に入力するため、tenant_code_prefix だけの規則には誰でも合わせられます。有利なプランに使う場合は、partner_id と組み合わせてください。
条件を増やすときは、列を足して RegistrationPlanRule::matches() に照合を足します。
テナント IP 制限
tenant_allowed_ips テーブルで管理します。テナントごとに許可する IP アドレスを、1つのアドレスか CIDR 表記の範囲で登録できます(IPv4 と IPv6)。標準の機能で、組織の管理者が「組織の設定 → セキュリティ」で登録します(組織の API)。運営も管理画面から登録できます。
レコードが 1 件も存在しないテナントには制限がかかりません(全 IP 許可)。1 件以上登録すると、登録外の IP からのアクセスは 403 Forbidden(IP_RESTRICTED)になります。組織の画面は、拒んだ接続元を出して、管理者に伝えるよう案内します。
制限がかかるのは、tenant.restrict_ip を付けた経路です(Lase の組織の API と、組織へのログイン login-by-token・代理ログイン。アプリの組織の API にも付ける)。最初のログイン(組織を選ぶ前)と、MCP のエンドポイントにはかかりません(エージェントのトークンには、トークンごとの接続元の制限があります)。
運営の接続元(IP_RESTRICTION_ALLOWLIST)は、登録に関わらず常に通します。組織の管理者が締め出されないよう、組織の画面からは、今の接続元が許可に入らなくなる変更を保存できません。それでも入れなくなった組織は、運営が管理画面で登録を直します。
接続元は Request::ip() で判定します。アプリの前段のプロキシ(nginx・Cloudflare)が本当の接続元を渡し、アプリがそのプロキシだけを信頼する設定(TrustProxies)になっている必要があります。
| カラム | 説明 |
|---|---|
tenant_id | 対象テナントの ID |
cidr | 許可する IP または CIDR(例: 203.0.113.0/24、203.0.113.1) |
reason | 登録理由(任意) |
登録・削除時にキャッシュ(tenant:{code}:allowed_ips)が自動でクリアされます。