我需要一些帮助来制定我的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)的文档。
但上述规则未按预期运行。
答案 0 :(得分:4)
resource.data: Null
-尝试创建新实体时会发生此错误。
在write
和create
上分割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 文档的路径。