Firebase Firestore基于引用数据类型的安全规则

时间:2018-03-10 06:30:33

标签: firebase google-cloud-firestore firebase-security

在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)
);

但我仍然缺少权限或权限不足

2 个答案:

答案 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(看起来您也正在这样做)