Cloud Firestore安全规则“如果存在”不起作用

时间:2019-05-09 23:31:41

标签: firebase google-cloud-firestore firebase-security-rules

我在Cloud Firestore上有一个简单的聊天应用程序,具有以下安全规则,只有在用户“加入”应用程序本身的聊天室中时,才允许用户在聊天室中发送消息:

match /hangouts/{hangout}/messages/{message} {
        allow create, write, update, read: if exists(/databases/$(database)/documents/users/{userId}/hangout/{hangout});
    }

如果用户在Firestore的集合中具有hangoutID,则应允许他们将消息发送到该hangoutID。但是,我仍然收到错误消息:

Write at hangouts/ChIJPRVm2R7H54kRKLP2ttsuUko/messages/17225E70-B708-4033-AE5A-D0CBBD1BC69F failed: Missing or insufficient permissions.

我还有2条与视频群聊相关的规则。这些可能会干扰吗?

match /hangouts/{hangout} {
    allow read, update, write, create: if request.auth.uid != null;
}

match /hangouts/{hangout}/members/{userId} {
    allow read: if request.auth.uid != null;
  allow create, update, write, delete: if request.auth.uid == userId;
}

第一个是让人们可以创建和查看聊天室视频群聊,第二个是允许人们加入。

我在做什么错?我对这个概念有些陌生。

谢谢!

1 个答案:

答案 0 :(得分:1)

您似乎没有正确执行文档路径的变量替换。在match部分中,您使用{curly braces}指示通配符的位置,但是在路径表达式中,您使用通配符的名称,例如$(this)。

/databases/$(database)/documents/users/$(userId)/hangout/$(hangout)