我对特定文档有以下安全规则:
match /items/{itemId} {
allow read, write: if request.auth != null && exists(/databases/$(database)/documents/items/$(itemId)) == false || request.auth.uid == resource.data.createdBy;
}
当我对该集合执行set()
时,这是有效的。但是当我在set
中执行batch
并出现以下错误时,它失败了:
Error: Missing or insufficient permissions.
我假设我的安全规则需要更改以处理批量写入,但没有相关文档。有什么指针吗?
更新: 这是重现问题的最小代码 - > https://firestore-batch-test.firebaseapp.com/(页面上的所有JavaScript内联)。
确切的规则:
service cloud.firestore {
match /databases/{database}/documents {
match /items/{itemId} {
allow read, write: if request.auth != null && exists(/databases/$(database)/documents/items/$(itemId)) == false || request.auth.uid == resource.data.createdBy;
}
}
}
答案 0 :(得分:1)
不幸的是,现在Firestore上无法实现这一点。
在实时数据库中,您有newData
,其中包含批量中所有写入(RTDB中的多位置更新)后它将存在的数据。但是在不存在的Firestore上。
有人正在研究实施这项工作需要做些什么,但像往常一样:没有时间表,也没有承诺。
目前您无法在客户端中执行任何解决方法,但您当然可以使用云功能来确保至少执行写入的代码是可信的。