Google cloud firestore 访问路径文档';当存在多个路径变量时,将删除数据

Google cloud firestore 访问路径文档';当存在多个路径变量时,将删除数据,google-cloud-firestore,firebase-security,Google Cloud Firestore,Firebase Security,我正在开发一个小型聊天应用程序来提高我的Android/Firebase技能。 但是我遇到了一个关于文档访问的问题。 我希望保护的文档路径如下 chat/{chat\u id}/messages/{message\u id} 为了让用户阅读或编写新的消息,他们需要获得授权,这意味着request.auth!=空。 而且,我只希望作为给定聊天室成员的用户能够读/写消息 在{chat\u id}文档中,我有一个列表字段,其中包含当前是该聊天室成员的所有用户的uid。因此,为了让用户访问消息,我需要验

我正在开发一个小型聊天应用程序来提高我的Android/Firebase技能。 但是我遇到了一个关于文档访问的问题。 我希望保护的文档路径如下
chat/{chat\u id}/messages/{message\u id}

为了让用户阅读或编写新的
消息
,他们需要获得授权,这意味着
request.auth!=空
。 而且,我只希望作为给定聊天室成员的用户能够读/写消息

{chat\u id}
文档中,我有一个
列表
字段,其中包含当前是该聊天室成员的所有用户的
uid
。因此,为了让用户访问消息,我需要验证他们的uid是否存在于
{chat\u id}.data.members
列表中。 当前是否有方法从消息规则访问
{chat\u id}
文档
如果我使用
resource.data
,它会给我一个
消息
对象,我不需要它,因为它不包含任何重要数据


非常感谢您的帮助:)

您可以访问当前文档/集合的任何可变路径段(在Firestore文档中也称为
通配符)

例如,请查看的Firebase文档示例,其中包括:

allow create: if request.auth != null && exists(/databases/$(database)/documents/users/$(request.auth.uid))
在这里,
$(数据库)
是包含数据库的名称,在父匹配语句中声明


在您的示例中,您可以从问题中显示的路径访问
$(chat\u id)
$(message\u id)
,例如从外部匹配语句访问
$(database)
,以及
$request
$resource
内置全局变量。

回答下面的具体问题。如果这不允许您解决问题,请编辑您的问题以显示。因此,如果我尝试检查路径
聊天室/{chatroom\u id}/members/{member\u id}
上的
members
集合下是否存在key=
request.auth.uid
的文档,我会执行以下操作:
存在(/databases/$(database)/documents/chatRooms/$(resource.data.chatRoomID)/members/$(request.auth.uid))
?是的,乍一看是正确的。如果您在使其工作时遇到困难,请提供我在您的问题中的评论中所要求的。到目前为止,这是增加您获得我们帮助的机会的最佳方式如果我的答案有用,请单击向上投票按钮(▲) 如果它回答了您的问题,请单击复选标记(✓) 接受它。这样别人就知道你得到了(足够的)帮助。还有,我知道,今天有点匆忙,所以我忘了:)