有一个用于查询/许可的用例我在firestore的文档中找不到,也没有找到flutter的社区 . 例子稀少而且通常很简单 .
Problem: 查询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();
在flutter 's side it'中列出集合中的所有项目更加复杂,因为在where子句中不支持 IN
运算符 . 我正在尝试类似的东西
Firestore.instance.collection("groups").where(phoneNumberData + " in members.keys()", isEqualTo: true)