如何确保仅在客户端写入多个文档的原子写入? 例如,在创建记录时,会生成记录文档并同时生成记录日志文档(两个不同的位置)。
我不希望用户通过仅创建没有记录日志文档的记录文档来覆盖。这是否可以使用当前的firestore安全规则?
答案 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