拒绝读取未发布的帖子firebase相同集合

拒绝读取未发布的帖子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 } 在我的应用

我有一个简单的fireStore集合,名为
笑话
,其中每个笑话都有一个文档。 在一个笑话中,有一个键
已发布: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
}
另请参见上的文档,特别是上的部分