如何使用Firebase规则存在于Firestore的子集合中

如何使用Firebase规则存在于Firestore的子集合中,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我目前正在研究Firebase规则,我也是一个新手。我使用的是exists,它似乎不起作用,可能是我的语法或查询不正确。你知道该怎么做吗?我试图检查我用红色圈起来的文档数据(如果存在) 编辑:根据建议,我似乎将使用get和not exist来提取文件路径中的uid,我的问题是如何使我包围的字段的文件路径用于Firebase规则中的条件 客户端代码 return Firestore.instance .collection('contacts') .document(uid)

我目前正在研究Firebase规则,我也是一个新手。我使用的是exists,它似乎不起作用,可能是我的语法或查询不正确。你知道该怎么做吗?我试图检查我用红色圈起来的文档数据(如果存在)

编辑:根据建议,我似乎将使用get和not exist来提取文件路径中的uid,我的问题是如何使我包围的字段的文件路径用于Firebase规则中的条件

客户端代码

return Firestore.instance
    .collection('contacts')
    .document(uid)
    .setData({
  friendId: {
     “message”: {
    },
    “uid”: friendId,
  }
});
Firebase安全规则

    match /databases/{database}/documents {
        match /contacts/{userID}/{friendID} {
          allow read,write : if isValidToAccessContacts(userID,friendID);
        }
      }

        function isValidToAccessContacts(userId,friendID){
          return exists(/databases/$(database)/documents/contacts
          /$(request.auth.uid)/$(friendID.data.uid)/{document=**}) || 

          exists(/databases/$(database)/documents/contacts
          /$(friendID.data.uid)/$(request.auth.uid)/{document=**}) || 

          exists(/databases/$(database)/documents/contacts
          /$(request.auth.uid)/$(request.auth.uid)/{document=**})
          ;
        }

不能使用这样的通配符{document=**}使用exists。您必须调出文档的完整路径以检查是否存在。

此处没有足够的信息来了解发生了什么。请编辑任务以显示整个规则集、发出请求的客户端代码以及您正在处理的数据。我们应该能够清楚地看到所有的值,而不仅仅是变量。我已经更新了所有相关的代码,感谢您指出。客户端的代码工作正常,我认为只提供Firebase规则就足够了。您没有包括发出请求的客户端代码。我们需要能够看到正在发生的一切。如果没有触发规则的客户端代码,规则就没有任何意义。如果没有客户端代码,规则根本无法执行任何操作。客户端代码已发布。删除{document=**}就足够了,还是我还需要指示子集合中的项?exists/databases/$database/documents/contacts/$friendID.data.uid/$request.auth.uidAs我说过,您需要调用文档的完整路径进行检查。我不知道这是怎么回事。谢谢你回答我的问题,如果你能在我所提供的FixSt店数据和客户端代码基础上建立完整的路径,我会把它看作是公认的答案。正如我所说,我不知道你要检查哪一个文档。我更新了问题,并圈出了红色,以表示我正在检查的文档数据是否存在。