在flutter中使用复杂的过滤器查询firestore集合

时间:2018-03-27 21:35:23

标签: firebase google-cloud-firestore flutter

有一个用于查询/许可的用例我在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)

0 个答案:

没有答案