我有一个顶级集合:"组织";,在该收款单据中有一个员工地图,如下所示:
employees: {
uid1: {
displayName: John Do
[...]
}
uid2 {
[...]
}
}
我还有另一个顶级收藏:;客户";有这样的组织图:
organizations: {
organizationId1: some string,
organizationId2: some other string,
[...]
}
其中:
- uid是firebase auth的用户id
- organizationId是组织文档的文档id
用户可以在多个组织中,客户也可以在多家组织之间共享。
我想在客户文档中列出的至少一个组织的员工处重新存储对客户文档的访问。
是否没有办法在firestore.rules 中循环
我认为答案可能是mapDiff和自定义声明。
用户自定义声明:
organizations:[organizationId1, organizationId2, ...]
但我很难理解文档:https://firebase.google.com/docs/reference/rules/rules.MapDiff
有办法做到这一点吗?
也许我没有正确理解,但你可以试试这样的东西:
允许读、写:如果在[organization1,organization2…]中使用组织
https://firebase.google.com/docs/reference/rules/rules.List
我终于找到了为此设置规则的方法:
match /customer/{cId} {
allow create: if request.auth != null;
allow read, update: if (request.auth.token.organisations.keys().hasAny(resource.data.organizationIds.keys()));
allow delete: if false;
}
我的自定义声明如下:(只有1到5个组织,所以传输不重(
organizations:{
organizationId1: "role",
organizationId2: "admin",
...
}
我将客户文档归档为这样的地图:
organizationIds{
organization1Id: "some AES key used for security purpose",
organization358Id: "some AES key used for security purpose"
}
它工作得很好,使用自定义声明每天可以节省无数的阅读量。