首页 > 解决方案 > Firestore 安全规则限制读取以使用 collectionGroup(..)?

问题描述

几个问题涉及知道 Firestore uid 是否允许黑客编辑该人的数据,例如这个问题这个问题。我的问题是关于过滤用户何时可以读取他人数据的安全规则。

具体来说,我有一个允许人们匿名发布数据的社交媒体应用程序。我的数据模型是/users/{user}/posts/{post}. 我使用 db.collectionGroup("posts") 来构建帖子的时间线(一些匿名,其他带有用户名)。

非匿名帖子有一个有效的 uid,所以黑客要找出某人的 uid 并不难,我并不担心。我担心的是黑客是否可以查询usersRef.document(uid).posts.getDocuments();以获取该用户的所有帖子,包括匿名帖子?

因为我的应用程序从用户“帖子”集合构建时间线,所以我不能编写他们不能阅读其他用户帖子的规则。我可以写一个规则,他们只能阅读 collectionGroup 的帖子吗?

标签: google-cloud-firestorefirebase-security

解决方案


以现在的结构方式,这是不可能的。这是您编写规则以允许集合组查询的方式,如文档中所述

    match /{path=**}/posts/{post} {
      allow read: if ...condition...;
    }

规则中的path通配符明确允许所有名为“posts”的集合的所有读取。该规则不会将读取限制为仅收集组查询 - 任何“帖子”上的任何正常收集查询都将被允许。

还要记住,与普通集合查询相比,集合组查询不会对调用者隐藏任何数据。查询结果仍将包含对每个文档的完整路径的引用,其中包括路径中的文档 uid。


推荐阅读