我有一个使用Cloud Firestore的应用程序。我正在尝试使用Firebase安全规则保护数据库安全,并且一直在努力接收通过收集组查询查询的文档。
match /{path=**}/groups/{groupId} {
allow read: if resource.data.id == resource.id;
}
match /{path=**}/groups/{groupId} {
allow read: if resource.data.id == "1" <--- hard coding the value to match my DB, this works;
}
this.db
.collectionGroup('groups')
.where('id', '==', id)
.get()
.then(snapshot => { ... });
答案 0 :(得分:0)
我不希望该第一条规则在任何情况下都能起作用,因为它试图根据文档的内容过滤文档。 Security rules are not filters。如果它在控制台模拟器中有效,则可能是模拟器中的错误。另外,请记住,模拟器不模拟查询,它只是测试文档的获取。
第二条规则起作用,因为客户端查询与这些规则完全匹配。它们都要求文档ID属性为“ 1”。由于客户端正在指定过滤器,并且过滤器与规则匹配,因此可以。
我尚不清楚您的第一条规则应该允许还是拒绝。您似乎只希望允许其ID属性与其实际文档ID相同的文档。但是由于客户端实际上没有能力表达该过滤条件,因此规则只是每次都拒绝查询。