Firebase规则:仅在满足资源属性条件时允许只读

时间:2020-07-30 17:20:14

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

我很难设置仅允许阅读公共消息的规则。不确定我是否要按照正确的方式进行操作。

我有一个收藏集/ 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

当我运行测试时,资源为空。

我想做的只是允许阅读公共消息。我需要做些什么才能做到这一点?

1 个答案:

答案 0 :(得分:2)

由于security rules are not filters,查询被拒绝。 Read more about that。请务必了解文档中所述的工作方式。

您的查询要求集合中的所有文档,但是您的规则仅允许对isPublic为true的那些对象进行读取。由于规则不会过滤结果,因此整个查询都会被拒绝。

查询与规则匹配时将起作用。这意味着您的查询将必须添加与规则匹配的过滤器。您将需要一个where子句,该子句仅指定isPublic == true的文档,以便查询与规则的约束匹配。

相关问题