1

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 つ以上の役割に分かれる必要がある場合、これは機能しません。

当初は、ロールの種類とリソースのリストを含むロール情報を各ユーザーにコピーすることだけを考えていました。問題は、データ構造がユーザーに移動またはコピーされた場合でも、ユーザーがリソースへのアクセス権を持っているかどうかを確認するための検索は、特定の会社のすべてのユーザー ロールを検索して、ユーザーがアクセス権を持っているかどうかを判断しようとすることで解決されることです。 .

4

0 に答える 0