多位置更新firestore中的安全规则

时间:2018-03-29 14:49:05

标签: google-cloud-firestore

如何确保仅在客户端写入多个文档的原子写入? 例如,在创建记录时,会生成记录文档并同时生成记录日志文档(两个不同的位置)。

我不希望用户通过仅创建没有记录日志文档的记录文档来覆盖。这是否可以使用当前的firestore安全规则?

1 个答案:

答案 0 :(得分:2)

使用getAfter()函数查看写入或写入写入后文档的状态。您可以使用它来确保更新其他文档中的值,例如:

service cloud.firestore {
  match /databases/{database}/documents {

    // Allow a user to update a record or log only if they keep the timestamps equal for the same ID
    match /records/{record} {
      allow write: if request.auth.uid != null &&
                      getAfter(/databases/$(database)/documents/logs/$(record)).data.timestamp == request.resource.data.timestamp;
    }

    match /logs/{log} {
      allow write: if request.auth.uid != null &&
                      getAfter(/databases/$(database)/documents/records/$(log)).data.timestamp == request.resource.data.timestamp;
    }
}

文档:https://firebase.google.com/docs/firestore/reference/security/#service_defined