我在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;
}
第一个是让人们可以创建和查看聊天室视频群聊,第二个是允许人们加入。
我在做什么错?我对这个概念有些陌生。
谢谢!
答案 0 :(得分:1)
您似乎没有正确执行文档路径的变量替换。在match部分中,您使用{curly braces}指示通配符的位置,但是在路径表达式中,您使用通配符的名称,例如$(this)。
/databases/$(database)/documents/users/$(userId)/hangout/$(hangout)