Firestore允许列表(如果提供了特定字段)

所以我一直在搜索很多东西,但找不到任何东西。 收集帖子评论,只有登录用户才能阅读。

如何为 list 操作编写安全规则,以便仅在尝试获取特定帖子的评论时才允许列出。查询非常简单,如下所示:

let query = store.comments
    .where( 'postId','==',postId )
    .orderBy( 'createdAt','desc' )
    .limit(10)
    .get()

我担心人们在获取评论时会想到没有具体的postId 。因此,我将查询的文档数量限制为 max。每个请求10个,以及执行此操作时需要登录,但是,为了尝试仅在存在 postId 时才允许列出,我尝试了如此多的变种都没有用。

match /comments/{key} {
  allow list: if isLoggedIn() && request.query.limit <= 10 && request.resource.data.keys().hasAny(['postId'])
}

不起作用。

allow list: if isLoggedIn() && request.query.limit <= 10 && request.resource.data.postId is string

也无法正常工作。

allow list: if isLoggedIn() && request.query.limit <= 10 && request.resource.data.postId == resouce.data.postId

什么都没有。尝试过 hasAll hasOnly ,仍然没有。 我认为发生的是,仅在列出文档时, request.resource.data 实际上并不存在。

我知道您可以检查 query.orderBy ,但这对我而言无济于事。

请告知

ywksyz66 回答:Firestore允许列表(如果提供了特定字段)

当前不支持您使用request.resource.data.keys().hasAny(['postId'])进行的操作。请注意,API文档中提到了request.resource

  

新资源值,仅在写入请求中出现。

安全规则不提供对查询过滤器中数据的访问。也就是说,没有表达式可以要求存在某个命名过滤器才能执行查询。 (当然,尽管可以通过comparing the existing document field values to known strings or variables检查过滤器的 value 是否有效。)

正如您在注释中建议的那样,您应该使用postId作为集合的文档ID来组织数据。只要您不允许对该集合进行list访问(这将拒绝所有不只是文档获取的查询),那将迫使客户端知道文档的postId。

本文链接:https://www.f2er.com/3114335.html

大家都在问