正在努力寻找具有许多用户角色的应用的Firestore结构的有效示例。
Super Admin
--------------- Companies level
Owners
Accountants
Managers
Developers
--------------- Companies level
Visitors
公司开发产品,每个产品可以有多个开发人员和一个经理。
管理员可以创建和删除他们的产品,开发人员只能读取和更新他们所属的产品。
会计只能读取公司内部的所有产品。所有者是他公司的管理员。
我试图将职位存储在/products/{product}/owners/{owner}
之类的子集合中。
但是无法用子集合客户端正确查询这种结构。
最终我能够以例如所有者存储在Firestore地图中(模拟器不允许该数组):
match /products/{product} {
function isOwner() {
return resource.data.owners[request.auth.uid];
// below are OK for Simulator but can't be queried using .where() client-side
// return exists(/databases/$(database)/documents/products/$(product)/owners/$(request.auth.uid));
// return get(/databases/$(database)/documents/products/$(product)/owners/$(request.auth.uid)).data != null;
}
...
allow get, list: if isOwner() || isAccountant() || isManager() || isDeveloper();
allow update: if isOwner() || isManager() || isDeveloper();
allow create: if isOwner() || isManager();
allow delete: if isOwner();
}
firestore
.collection('products')
.where(`owners.${user}`, '==', true)
.limit(5)
// .orderBy('created', 'desc') // Also was unable to sort it by another field, why is it so?
.onSnapshot(snap => snap.forEach(e => console.log(e)));
在产品内部存储所有者,会计师,经理,开发人员似乎是一个好主意,但我找不到任何证明或证明这种结构的参考。同样,.where()查询也不支持地图类型,这也是非常可疑的。
请提供有关如何在类似应用程序中处理多层RBAC的建议?!