在Firestore中比较资源和请求资源

时间:2018-10-23 01:43:17

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

我有一个简单的Firestore规则:

allow update: if request.resource.data.reservedBy == resource.data.reservedBy;

我在模拟器中的有效载荷是

{“ 名称”:“ /数据库/(默认)/文档/书籍/ I3dbzzwGJGXnqMQBOxoP”,“数据”:{“ reservedBy”:“ Ivanko”}}

,方法是“更新”。实际记录中“ reservedBy”字段的值完全不同。

无论我做什么,无论我将有效负载更改为什么,规则都将始终返回true并允许更新。这是一个错误还是我错过了一些东西。有趣的是,如果我将“更新”更改为“创建”,则该规则将按预期工作。还有其他人遇到吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

Firebase团队刚刚回答说,这确实是模拟器错误,并且该规则应在生产环境中有效。

答案 1 :(得分:0)

我一直在处理类似的问题,我发现这是罪魁祸首……摘录自(https://firebase.google.com/docs/firestore/security/rules-conditions)。 -对于仅修改文档字段子集的更新操作,request.resource变量将在操作“之后”包含“待定”文档状态。