組織管理機能の定義
組織体験を設計する前に、マルチテナントアプリの主要な要件をリストアップしましょう。この章では、その体験を形作る際に考慮すべきいくつかの重要事項を紹介します。
組織内のアクセス制御を定義する
このシナリオでは、テナント内で組織管理者はユーザーロールを更新できますが、一般メンバーはできません。(対照的に、組織の作成は、SaaS マルチテナントアプリのあらゆるエンドユーザーが実行できるシステムレベルのアクションです。)このようなきめ細かなアクセス制御をサポートするには、組織の権限とロールを定義し、管理者のみが組織内のロールを更新できるようにします。
組織のロールと権限について詳しくは、組織テンプレート をご覧ください。
admin ロールは組織内のすべてのリソースへのフルアクセス権を持ち、member ロールはアクセスが制限されています。例えば、各ロールには次のような権限を持たせることができます:
adminロール:read:data- 組織のすべてのデータリソースの読み取り権限。write:data- 組織のすべてのデータリソースの書き込み権限。delete:data- 組織のすべてのデータリソースの削除権限。invite:member- 組織へのメンバー招待権限。manage:member- 組織内のメンバー管理権限。delete:member- 組織からメンバーを削除する権限。
memberロール:read:data- 組織のすべてのデータリソースの読み取り権限。write:data- 組織のすべてのデータリソースの書き込み権限。invite:member- 組織へのメンバー招待権限。
これらの設定は Logto Console で簡単に行えます。アクセス制御の設定は、組織(マルチテナント)アーキテクチャの重要な部分です。
ユーザーによる組織のセルフマネジメントを有効にする
アプリには、いくつかの管理機能が必要になる場合もあります。これらを構築するには、Logto Management API を利用します。以下は一般的な機能と関連 API エンドポイントです。次章では、それらの実装方法をステップバイステップで解説します。
管理者とメンバーによる他ユーザーの招待
管理者とメンバーの両方が他のユーザーを組織に招待できます。詳細は 組織メンバーの招待 をご覧ください。
管理者によるメンバーロールの変更
管理者は他のメンバーのロールを変更できます。また、部門リーダーやプロジェクトマネージャー、コーディネーターなど、組織に特化したロールを作成することも可能です。これらは以下の Management API で実装できます:
curl \
-X POST https://[tenant_id].logto.app/api/organizations/{id}/users/{userId}/roles \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"organizationRoleIds":["admin"]}'
または一括で:
curl \
-X POST https://[tenant_id].logto.app/api/organizations/{id}/users/roles \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"userIds":["userId1", "userId2"],"organizationRoleIds":["admin"]}'
組織へのボット追加
管理者が特定の組織にボットを追加できるようにすることも可能です。まずマシン間通信 (M2M) アプリを作成し、これらの M2M アプリをボットとして組織に追加します。
curl \
-X POST https://[tenant_id].logto.app/api/organizations/{id}/applications \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"applicationIds":["botAppId"]}'
その後、これらのボットに組織ロールを割り当てることもできます。
curl \
-X POST https://[tenant_id].logto.app/api/organizations/{id}/applications/roles \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"applicationIds":["botApp1"],"organizationRoleIds":["botRoleId"]}'