如何设置Firestore安全规则? resource.data:空值错误

时间:2019-05-02 11:39:14

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

我需要一些帮助来制定我的Firestore安全规则。

这些是我的Firestore规则:

service cloud.firestore {
  match /databases/{database}/documents {
     match /orders/{orderID} {
       allow read, update: if  request.auth.uid == resource.data.buyerId  || request.auth.uid == resource.data.sellerId;
    }
  }
}

我的订单收集:

orders: {
sellerId: 'some-id',
createdAt: timestamp,
buyerId: 'some-id'
}

它应该返回订单集合中所有buyerId或SellerId等于授权用户(request.auth.uid)的文档。

但上述规则未按预期运行。

firestore collections screenshot

firebase simulator output

2 个答案:

答案 0 :(得分:4)

resource.data: Null-尝试创建新实体时会发生此错误。

writecreate上分割update规则。

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /user/{userId} {
      allow read: if request.auth.uid == userId;

      function authed() {
        return request.auth.uid == userId;
      }
      allow create: if authed() && request.resource.data.keys().hasOnly(['name']);
      allow update: if authed() && request.resource.data.diff(resource.data).changedKeys().hasOnly(['name']);
      allow delete: if authed();
    }
  }
}

答案 1 :(得分:0)

该错误消息表明所请求的文档实际上不在数据库中。您输入了“ orders / {orderId}”,就像您在模拟器的“位置”字段中输入了通配符一样。那是行不通的。如果要测试使用其字段值的规则,则需要输入存在的 actual 文档的路径。