有一个用于查询/许可的用例我在firestore的文档中找不到,也没有找到flutter的社区。例子稀少而且通常很简单。
问题:查询firestore集合而不通过会话变量(user.uid)进行过滤,而另一个密钥由另一个集合中的会话提供。
想象一下,你在firestore中有以下数据结构:
/sessions/{user.uid} (collection) {
phone_number: phoneNumberData
}
/groups/{groupId} (collection) {
members (map) = { phoneNumberData: true }
}
为了保护对群组的访问权限,我们需要检查持有会话的人是否在群组中有phoneNumberData
。某种测试类似:group.members[sessions.$(user.uid).phone_number] == true
(不是实际规则)。
我试图实现规则的某些变体,而我所能得到的只是一个权限被拒绝,来自下面的示例:
match /groups/{groupId} {
allow read: if get(/databases/$(database)/documents/sessions/$(request.auth.uid)).data.phone_number in get(/databases/$(database)/documents/groups/$(groupId)).data.members.keys();
在扑克方面,列出集合中的所有项目更加复杂,因为没有支持
IN
运算符在where子句中。我正在尝试像
Firestore.instance.collection("groups").where(phoneNumberData + " in members.keys()", isEqualTo: true)