Firebase Firestore的集合组权限
我有以下规则:Firebase Firestore的集合组权限,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我有以下规则: match /suuntoAppAccessTokens/{userName} { allow create: if request.auth.uid != null && request.auth.token.firebase.sign_in_provider != 'anonymous'; match /tokens/{userID} { allow read, write, create, update, delete
match /suuntoAppAccessTokens/{userName} {
allow create: if request.auth.uid != null && request.auth.token.firebase.sign_in_provider != 'anonymous';
match /tokens/{userID} {
allow read, write, create, update, delete: if request.auth.uid == userID && request.auth.token.firebase.sign_in_provider != 'anonymous';
}
}
match /{path=**}/tokens/{userID} {
allow read, write, create, update, delete: if request.auth.uid == userID;
}
这意味着对于路径/suuntappaccesstokens/dimitriskanellopoulos/tokens/{userID}
,当前用户应该具有访问权限
但是,当我这样查询集合组时:
return this.afs.collectionGroup('tokens').snapshotChanges();
我得到一个权限错误
直接在tokes/{userID}下获取文档的工作与预期的一样
我该怎么做才能让当前用户运行collectionGroup查询并根据我的规则获取允许他获取的项目 您的规则期望安全规则将过滤所有
令牌
集合中的所有文档,以便仅读取当前用户的文档。这在安全规则中是不可能的安全规则不是筛选器。来自:
在编写查询以检索文档时,请记住安全性
规则不是过滤器,查询是全部或无。为了节省你的时间和精力
资源,云Firestore根据查询的潜力评估查询
结果集,而不是所有字段的实际字段值
文件。如果查询可能返回
客户端没有读取权限,整个请求失败
您需要将查询更改为客户端仅请求当前用户完全可以读取的文档。不幸的是,我无法告诉您当前的模式是否可以这样做。文档{userId}的ID不能在集合组查询中用于筛选文档。因此,您必须确保满足以下两个标准:
- 您将需要文档中的某些字段,以便可以对其进行筛选以完成此项工作
- 您需要调整您的安全规则,以完全符合客户的要求
collectionGroup('tokens').where("uid", "==", uid)
确保客户端正确地传入uid
此外,您还需要确保该规则按照相同的标准授予访问权限:
match /{path=**}/tokens/{userID} {
allow read, write, create, update, delete:
if request.auth.uid == resource.data.uid;
}
只有当文档的uid字段与客户端要求的身份验证uid相同时,才允许访问该文档