Skip to content

アーキテクチャ ​

概要 ​

Lase は 管理者 (Admin) と テナント (Tenant) という 2 つのコンテキストを中心に設計されています。どちらも Sanctum ベースの Cookie 認証を使用し、Authorize ミドルウェアでコンテキストを分離します。

┌───────────────────────────────────────────────────────┐
│                    Laravel Application                │
│                                                       │
│  ┌─────────────┐          ┌─────────────────────────┐ │
│  │  Admin API  │          │      Tenant API         │ │
│  │ /api/admin/ │          │ {code}.domain/api/tenant│ │
│  └──────┬──────┘          └────────────┬────────────┘ │
│         │ Authorize:admin              │ Authorize:tenant + IdentifyTenant
│  ┌──────▼──────┐          ┌────────────▼────────────┐ │
│  │ AdminUser   │          │    TenantUser / User    │ │
│  └─────────────┘          └─────────────────────────┘ │
│                                                       │
│  ┌─────────────────────────────────────────────────┐  │
│  │             Common API  /api/                   │  │
│  │    (認証不要 or auth ミドルウェアのみ)           │  │
│  └─────────────────────────────────────────────────┘  │
└───────────────────────────────────────────────────────┘

ルート構成 ​

プレフィックスファイル用途
/api/admin/routes/api/admin.php管理者向け操作(テナント・サブスクリプション・プラン等)
{code}.domain/api/tenant/routes/api/tenant.phpテナントユーザー向け操作
/api/routes/api/common.php全ユーザー共通(アプリ情報・チャット・プロフィール)
/api/ (public)routes/api/public.php認証不要のパブリックエンドポイント

アプリのルートとの重複

Lase のルートはアプリのルートより後(booted)に登録されます。アプリが Lase と同じメソッド・URI のルートを定義すると、Lase のルートで黙って上書きされ、アプリ側の定義は使われません(php artisan route:list -v で登録元を確認できます)。Lase のルートの挙動を変えたい場合は、同じ URI で定義し直すのではなく、Lase 側を修正してください。

テナント識別の仕組み ​

テナント API はサブドメイン形式 ({tenantCode}.example.com) で分離されます。IdentifyTenant ミドルウェアがリクエストのサブドメインからテナントを解決し、$request->attributes->get('tenant') で取得できるようにします。

リクエスト: https://acme.example.com/api/tenant/...
     ↓
IdentifyTenant ミドルウェア
     ↓
Cache::remember("tenant:acme", ...) でテナントを取得
     ↓
$request->attributes->set('tenant', $tenant)
     ↓
コントローラに到達

認証フロー ​

管理者 ​

  1. 管理者が /api/admin/auth/activate でアカウントを有効化(招待リンク経由)
  2. Sanctum Cookie でログイン
  3. 各リクエストで auth + authorize:admin ミドルウェアを通過

テナントユーザー ​

  1. テナントユーザーが {code}.domain/api/auth/login-by-token でログイン or 招待リンク経由でアカウント有効化
  2. Sanctum Cookie でログイン
  3. 各リクエストで auth + authorize:tenant + tenant ミドルウェアを通過

ロール・権限 ​

管理者とテナントユーザーそれぞれにロールと権限が存在します。

モデルロール権限
AdminUserAdminRoleAdminRolePermission
TenantUser (User)TenantRoleTenantRolePermission

権限の判定は AuthorizerRegistry に登録された AdminAuthorizer / TenantAuthorizer が担います。アプリ側で独自の Authorizer を登録することも可能です。