ng-controller
我尝试按照以下方式进行数据库操作:
service cloud.firestore {
match /databases/{database}/documents {
match /cities/{city} {
allow write: if request.auth.uid != null &&
getAfter(
/databases/$(database)/documents/countries/$(request.resource.data.country)
).data.last_updated == request.time;
}
match /countries/{country} {
allow write: if request.auth.uid != null;
}
}
}
如果我更改城市的人口,它应该自动更新特定国家/地区的 last_updated 字段。
但是这没有发生吗? 我提到了本教程:Transactions and batched writes
答案 0 :(得分:0)
您定义的安全规则仅强制执行是否允许对文档进行读写操作;他们实际上并没有修改文档的数据。所以你的规则
match /cities/{city} {
allow write: if request.auth.uid != null &&
getAfter(
/databases/$(database)/documents/countries/$(request.resource.data.country)
).data.last_updated == request.time;
}
只是说“如果在交易或批量写入结束时,相应国家/地区的last_updated
字段也已被更新,则允许写入城市文档。”
在客户端代码中,您需要进行以下交易(或批量写入):( 1)写入城市文档,(2)更新国家/地区的上次更新时间。