代码之家  ›  专栏  ›  技术社区  ›  Kushagra Gour

批处理集上的Firebase规则失败

  •  2
  • Kushagra Gour  · 技术社区  · 8 年前

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

    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 回复  |  直到 8 年前
        1
  •  3
  •   ArdentAngel Frank van Puffelen    6 年前

    编辑:

    现在可以通过调用 getAfter(path).data . 但这仅适用于单个文档,并且需要知道更新文档的确切路径。


    不幸的是,目前在Firestore上不可能做到这一点。

    在实时数据库中 newData ,它包含批处理中所有写入操作后将存在的数据(RTDB中的多位置更新)。但在Firestore上,这并不存在。

    有人正在研究如何实现这一点,但和往常一样:没有时间表,没有承诺。

    目前在客户机中还没有解决方案,但您当然可以使用云函数来确保至少编写的代码是可信的。