【发布时间】:2021-06-24 15:32:10
【问题描述】:
我知道 Firestore 规则允许对请求数据的特定字段和数据类型进行规则检查,但我也想控制正在更新的字段的具体差异。
例如,我在文档上有一个计数器。我只希望计数器在每次请求时增加一,不多也不少。
我在 firebase 控制台的规则操场上尝试了这个,它可以工作:
match /myCollection/{myDoc} {
allow update: if(request.resource.data.diff(resource.data).affectedKeys().hasOnly(["counter"])
&& request.resource.data.counter is int &&
request.resource.data.counter == resource.data.counter + 1);
}
然后在我调用的代码中:
docRef.update({
counter: firebase.firestore.FieldValue.increment(1)
}
由于权限被拒绝而被阻止。
我的猜测是规则将其注册为函数而不是文档值上的 int,这会导致它失败。 (这是有道理的)
如何在不先阅读文档的情况下正确验证规则中的这个客户端增量操作?
【问题讨论】:
标签: firebase google-cloud-firestore firebase-security