编辑:似乎是Firestore中的一个未解决的问题。另请参阅this post。
在Google Cloud Firestore中,我想为group
s的集合建模。每个组都包含一个name
,其列表包含user
和一些secretGroupData
。对我来说,这样做的自然方式是:
/groups
/group1 {
name: "Group 1"
users: { //object can be queried, simple array not
"user1": true,
"user5": true
}
secretGroupData: ...
}
/group2 { ... }
鉴于像user1
这样的用户,我想查询他所属的所有群组。此查询工作正常:
groupsRef.where("users.user1", "==", true)
但是,我想保护组数据。只有所有用户都可以读取所有组时,此查询才有效。当我通过规则
保护群组只能由群组成员阅读时match /groups/{groupId} {
allow read: if resource.data.users[request.auth.uid] == true;
}
上述查询不再起作用,因为只要它看到当前用户不成员的组,就会拒绝读访问权限the whole query fails。
Firestore中此问题的最佳解决方案是什么?我应该
group
并忽略其他的,而不是抛出错误?如果是这样,我怎么能实现这个目标呢?group
对所有user
都可读,并将secretGroupData
移动到子集合中,然后我可以将访问限制为仅限组成员/users/user1/groupIds: ["group1"]
)来添加冗余,因此我事先知道这些组并且可以通过ID查询它们非常感谢你的想法。