拒绝读取未发布的帖子firebase相同集合
我有一个简单的fireStore集合,名为拒绝读取未发布的帖子firebase相同集合,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我有一个简单的fireStore集合,名为笑话,其中每个笑话都有一个文档。 在一个笑话中,有一个键已发布:boolean 因此,我们的想法是收集一个笑话集,但每个文档都可以发布或不发布。我不希望用户查看未发布的笑话 在我的fireStore规则中,我有以下内容: match /jokes/{id} { allow read: if get(/databases/$(database)/documents/jokes/$(id)).data.published == true } 在我的应用
笑话
,其中每个笑话都有一个文档。
在一个笑话中,有一个键已发布:boolean
因此,我们的想法是收集一个笑话集,但每个文档都可以发布或不发布。我不希望用户查看未发布的笑话
在我的fireStore规则中,我有以下内容:
match /jokes/{id} {
allow read: if get(/databases/$(database)/documents/jokes/$(id)).data.published == true
}
在我的应用程序中,我希望用户只能看到发布的笑话,因此我使用where
this.$fireStore.collection('jokes').where('published', '==', true).get()
当我这样做时,控制台告诉我权限不足
是否可以使用这种模式,或者我必须使用云函数来提供发布的笑话?或者为未发布的文档创建单独的集合?此规则中不需要get()
,因为当前文档已作为资源提供。事实上,这里的问题是get()
,因为规则引擎无法一次性对所有文档进行静态评估
match /jokes/{id} {
allow read: if resource.data.published == true
}
另请参见上的文档,特别是上的部分