希望与具有角色/权限的多对多结构相关的建议。
我们需要一种允许用户属于许多组织的结构,并且用户拥有每个组织的角色/权限。例如,User1
属于ABC CO
Admin
,User1
属于XYZ CO
Guest
答案 0 :(得分:1)
我们已解决此问题如下:
organizations (collection) {
ABC (doc) {
permissions (object): {
User1DocID (object): {
admin: true
}
}
}
XYZ (doc) {
permissions (object): {
User2DocID (object): {
guest: true
}
}
}
}
这样您可以配置如下规则:
match /origanizations/{origanization} {
allow update, read: if resource.data.permissions[request.auth.uid].admin == true;
allow read: if resource.data.permissions[request.auth.uid].guest == true;
}
对于组织的资源,您必须将组织ID存储在特定文档中(显然)。然后,您可以按如下方式为它们设置规则:
match /origanizationRessources/{origanizationRessource} {
allow update: if get(/databases/$(database)/documents/organizations/$(resource.data.organizationId)).data.permissions[request.auth.uid].admin == true;
}
您还可以使用此设计轻松查询用户具有特定权限的数据。
请注意:此设计符合我们的目的,因为我们分配给组织的用户数量有限,直截了当。如果您不确定,请查看文档大小方面的限制(请参阅https://firebase.google.com/docs/firestore/quotas),了解您是否必须依赖其他设计。如果您碰巧处于可能达到这些限制的位置,请考虑单独的映射集合。