複数のテナントで使用される新しい Web アプリケーションのスキーマを作成しようとしています。過去にテナントごとにスキーマを使用するマルチテナント設計を行ったことがありますが、この新しいアプリケーションでは、テナントはデータへのアクセスを広範囲に共有できる必要があります。
疑似アプリを使用した私のシナリオは次のとおりです。
- A 社は、ソフトウェア プロジェクトを追跡するために「プロジェクト トラッカー」にサインアップします。
- B社もソフトウェアプロジェクトを追跡するためにサインアップします
- A 社は、プロジェクト トラッカーで一連の作業項目を含む新しいプロジェクトを作成します。
- 次に、会社 A は、これらの作業項目の一部を、実際に作業を行う会社 B 内のユーザー (請負業者のシナリオなど) に割り当てます。
また、別のしわもサポートする必要があります。
- 新しいソフトウェア プロジェクトのクライアントも、技術的にはテナントではありませんが、サインインしてプロジェクトのステータスを確認できる必要があります。
個別のスキーマとフェデレーション ユーザーを使用してこれを実行できることはわかっていますが、可能であればそれよりもエクスペリエンスをシンプルに保つようにしています。これは Web アプリなので、メール アドレスをフェデレーション ポイントとして使用して、A 社が作業項目を joe@companyb.com に割り当てるだけで、Joe がそのメール アドレスを使用してログインすると、作業項目を表示できるようにしたいと考えています。完了したら完了としてマークできます。
したがって、私の現在の考えは、オブジェクト ベースのセキュリティで行ベースのマルチテナント アプローチを使用することです。各オブジェクトには一連のロールが関連付けられており (管理者、リーダー、ライターなど)、ロールはユーザーに関連付けられます。次に、これらを使用して、tenant_id
.
これは、誰かがアクセスを提供した場合、システム内の任意のオブジェクトにアクセスできる可能性があることを意味します。テナントになると、実際には権限階層のルートで管理者になるだけです (例では、これはプロジェクト エンティティを作成できる会社エンティティの管理者です)。つまり、これはもはや実際にはマルチテナント アーキテクチャではありません...
この状況を処理するためのより良い方法はありますか?