firebase を使用してマルチテナント アプリを構築中です。アプリを構築しながら、ユーザーが複数の組織に所属し、各組織内で複数の役割を割り当てられるようにする RBAC モデルを構築しています。各ロールには、ユーザーがアクセスできるリソースが割り当てられています。
次のような firebase 構造が与えられた場合、ユーザーが特定の組織内のリソースにアクセスできるかどうかを判断する適切な firebase セキュリティ ルールを作成するにはどうすればよいでしょうか?
organizations
org1UUID
about
staff
uid1
roles
ViewerRoleUUID
about
type: "view"
resources
DashboardUUID: "true"
SomeSettingsUUID: "true"
MoreResourcesUUID: "true"
SysAdminUUID
about..
type: "full"
resources:
AdminAreaUUID: "true"
DashboardUUID: "true"
SomeSettingsUUID: "true"
type: "admin"
org2UUID...<repeat of above>
users
uid1
authinfo
organizations
org1UUID
roles
ViewRoleUUID: "true"
SysAdminUUID: "true"
org2UUID
roles
AnotherRoleUUID: "true"
firebase はルールで多対多の検索をサポートしていないため、データ モデルを変更してもこれが可能になる方法がわかりません。ノードのすべての子にアクセスする方法もわかりません。リソースをユーザー データにコピーすることも考えましたが、ノードの名前または ID を知らずにノードの子にアクセスする方法を見つけることができませんでした。私が見たすべての実装では、ユーザーが単一の役割から離れて、次のようなことを行うことしかできませんでした
".read": "(root.child('users/' + auth.uid + '/organizations/' + $organization).child('role').val() === "viewer"),
".write": "(root.child('users/' + auth.uid + '/organizations/' + $organization).child('role').val() === "admin")"
上記の例は、ユーザーに 1 つの役割が割り当てられている場合にのみ機能します。ただし、ユーザーがアクセスする必要があるリソースに応じて、ユーザーが 2 つ以上の役割に分かれる必要がある場合、これは機能しません。
当初は、ロールの種類とリソースのリストを含むロール情報を各ユーザーにコピーすることだけを考えていました。問題は、データ構造がユーザーに移動またはコピーされた場合でも、ユーザーがリソースへのアクセス権を持っているかどうかを確認するための検索は、特定の会社のすべてのユーザー ロールを検索して、ユーザーがアクセス権を持っているかどうかを判断しようとすることで解決されることです。 .