我正在开发Web服务。
我在Firestore中使用以下规则:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow write: if request.auth!=null;
}
}
}
但是我需要赋予“写”权限特定的集合。
例如,我有一些收藏,例如:
我想向他们添加“评论”,例如:
所以我想更改权限,例如:
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read;
allow write: if request.auth!=null;
}
match /news/{document=**}/comments/{document=**} {
allow read, write;
}
match /teams/{document=**}/comments/{document=**} {
allow read, write;
}
match /matches/{document=**}/comments/{document=**} {
allow read, write;
}
}
}
但这不起作用...
我该如何解决这个问题?
答案 0 :(得分:0)
它抱怨您在同一场比赛中使用了两个glob通配符,这是非法的(而且实际上没有任何意义)。这是您的一场比赛:
match /news/{document=**}/comments/{document=**}
{document=**}
是全局通配符。这就是**的意思。它将尝试匹配多个路径段。但这不是您想要的。您想要匹配的第一个通配符就是任何给定的文档ID,例如:
match /news/{newsId}/comments/{document=**}
现在,您有{newsId}
个新闻集下的文档ID匹配。全局通配符现在与嵌套在/news/{newsId}/comments
下的任何文档或子集合的文档匹配。
答案 1 :(得分:0)
这是非法声明:
match /news/{document=**}/comments/{document=**} {
您在相同的上下文中两次使用document
作为路径段标识符,这是不允许的。为了使规则有效,请确保每个路径段标识都有唯一的名称。例如:
match /news/{newsDocument}/comments/{commentsDocument=**} {