【问题标题】:Firebase Firestore security rules based on reference data type基于引用数据类型的 Firebase Firestore 安全规则
【发布时间】:2018-08-18 18:04:12
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    引用在安全规则中被视为paths,因此您可以将其与

    function checkUser() {
      return request.resource.data.userReference == /databases/$(database)/documents/users/$(request.auth.uid);
    }
    

    使用前面带有databases/$(database)/documents 的完整路径很重要。在这种情况下,我有一个名为 users 的集合,每个用户 id 都是他们的uid(看起来你也在这样做)

    【讨论】:

      【解决方案2】:

      这两条规则都适用于模拟器(Firebase 控制台):

      allow read, write: if resource.data.owner == 'users/' + request.auth.uid;
      

      allow read, write: if path(resource.data.owner) == /users/$(request.auth.uid);
      

      但不在我的代码查询中。

      【讨论】:

        猜你喜欢
        • 2018-11-27
        • 1970-01-01
        • 2021-04-11
        • 1970-01-01
        • 2019-06-15
        • 2020-01-22
        • 2021-07-14
        • 1970-01-01
        相关资源
        最近更新 更多