为什么Firestore中的给定示例无法按照文档运行?

时间:2018-08-10 04:03:03

标签: firebase google-cloud-firestore firebase-security-rules

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

1 个答案:

答案 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)更新国家/地区的上次更新时间。