我有一个简单的Firestore规则:
allow update: if request.resource.data.reservedBy == resource.data.reservedBy;
我在模拟器中的有效载荷是
{“ 名称”:“ /数据库/(默认)/文档/书籍/ I3dbzzwGJGXnqMQBOxoP”,“数据”:{“ reservedBy”:“ Ivanko”}}
,方法是“更新”。实际记录中“ reservedBy”字段的值完全不同。
无论我做什么,无论我将有效负载更改为什么,规则都将始终返回true并允许更新。这是一个错误还是我错过了一些东西。有趣的是,如果我将“更新”更改为“创建”,则该规则将按预期工作。还有其他人遇到吗?
谢谢。
答案 0 :(得分:1)
Firebase团队刚刚回答说,这确实是模拟器错误,并且该规则应在生产环境中有效。
答案 1 :(得分:0)
我一直在处理类似的问题,我发现这是罪魁祸首……摘录自(https://firebase.google.com/docs/firestore/security/rules-conditions)。 -对于仅修改文档字段子集的更新操作,request.resource变量将在操作“之后”包含“待定”文档状态。