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

Google cloud firestore 多位置更新firestore中的安全规则,google-cloud-firestore,Google Cloud Firestore,如何确保仅在客户端对多个文档进行原子写入? 例如,在创建记录时,会生成一个记录文档,同时还会生成一个记录日志文档(两个不同的位置) 我不希望用户通过只创建记录文档而不创建记录日志文档来覆盖。使用当前firestore安全规则是否可能做到这一点?使用getAfter()函数查看文档在写入一次或一组写入后的状态。您可以使用此选项确保另一文档中的值已更新,例如: service cloud.firestore { match /databases/{database}/documents {

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

我不希望用户通过只创建记录文档而不创建记录日志文档来覆盖。使用当前firestore安全规则是否可能做到这一点?

使用
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;
    }
}
文档:

使用
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;
    }
}
文档:

文档现在在这里:文档现在在这里: