用于限制读取以使用collectionGroup(..)的Firestore安全规则?

时间:2020-10-04 16:16:34

标签: google-cloud-firestore firebase-security

几个问题解决了是否知道Firestore uid是否允许黑客编辑该人的数据,例如this questionthis question。我的问题是关于安全规则,以便用户可以读取其他人的数据时进行过滤。

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

非匿名的帖子具有有效的uid,因此对于黑客来说,找出某人的uid并不困难,而我并不担心。我担心的是,黑客是否可以随后查询usersRef.document(uid).posts.getDocuments();来获取该用户的所有帖子,包括匿名帖子?

因为我的应用根据用户的“帖子”集合构建时间表,所以我无法编写规则,使他们无法阅读其他用户的帖子。我可以写一个规则,让他们只能阅读具有collectionGroup的帖子吗?

1 个答案:

答案 0 :(得分:2)

现在事情的结构不可能实现。如documentation

中所述,这是您编写允许集合组查询的规则的方式
    match /{path=**}/posts/{post} {
      allow read: if ...condition...;
    }

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

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