在Firestore中,我有一个拥有所有者的项目集合。
所有者可以是允许阅读其文档的用户。
使用userId
你可以这样做:
allow read, write: if resource.data.userId == request.auth.uid;
但是对于owner
引用字段,在安全规则方面似乎没有文档。
我尝试了这个安全规则:
allow read, write: if resource.data.owner == 'users/$(request.auth.uid)';
并像这样查询:
const owner = this.db.collection('/users').doc(auth.uid).ref;
const collection = this.db.collection('/items',
(ref) => ref.where('owner', '==', owner)
);
但我仍然缺少权限或权限不足。
答案 0 :(得分:2)
这两个规则在Simulator(Firebase控制台)中都对我有用:
allow read, write: if resource.data.owner == 'users/' + request.auth.uid;
和
allow read, write: if path(resource.data.owner) == /users/$(request.auth.uid);
但不在我的代码查询中。
答案 1 :(得分:1)
参考在安全规则中被视为paths,因此您可以将其与
进行比较function checkUser() {
return request.resource.data.userReference == /databases/$(database)/documents/users/$(request.auth.uid);
}
使用完整的路径并放在databases/$(database)/documents
前面很重要。在这种情况下,我有一个名为users
的集合,每个用户ID是他们的uid
(看起来您也正在这样做)