我很难设置仅允许阅读公共消息的规则。不确定我是否要按照正确的方式进行操作。
我有一个收藏集/ messages
{
isPublic:true,
message: "Public message"
},
{
isPublic:false,
message: "Private message"
}
我的规则设置为:
match /messages/{message=**} {
allow read: if resource.data.isPublic == true;
}
查询是这样的:
angularFirestore.collection('messages').get()
这将返回:
FirebaseError: Missing or insufficient permissions
当我运行测试时,资源为空。
我想做的只是允许阅读公共消息。我需要做些什么才能做到这一点?
答案 0 :(得分:2)
由于security rules are not filters,查询被拒绝。 Read more about that。请务必了解文档中所述的工作方式。
您的查询要求集合中的所有文档,但是您的规则仅允许对isPublic为true的那些对象进行读取。由于规则不会过滤结果,因此整个查询都会被拒绝。
查询与规则匹配时将起作用。这意味着您的查询将必须添加与规则匹配的过滤器。您将需要一个where子句,该子句仅指定isPublic == true的文档,以便查询与规则的约束匹配。