批处理集上的Firebase规则失败

时间:2018-01-10 06:38:13

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

我对特定文档有以下安全规则:

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;
  }
 }
}

1 个答案:

答案 0 :(得分:1)

不幸的是,现在Firestore上无法实现这一点。

在实时数据库中,您有newData,其中包含批量中所有写入(RTDB中的多位置更新)后它将存在的数据。但是在不存在的Firestore上。

有人正在研究实施这项工作需要做些什么,但像往常一样:没有时间表,也没有承诺。

目前您无法在客户端中执行任何解决方法,但您当然可以使用云功能来确保至少执行写入的代码是可信的。