我有这个数据结构:
并且需要一个规则,只允许在 city
时更新属性没有改变:
match /requests/{requestId} {
allow update: if (request.resource.data.diff(resource.data).unchangedKeys().
hasAll(["customerlocation.city"]))
这不起作用,因为 diff
结果只显示 customerlocation
字段,但不是 city
属性。甚至有可能实现我想要的吗?我知道在安全规则中使用嵌套对象可以做什么是有限制的,但我可能只是错过了一些东西。
最佳答案
我相信,如果您不想更改数据结构并且必须在 Firestore 规则内执行此操作,Aion 提出的解决方案是唯一可行的解决方案。
我不知道你的整体数据结构是什么样的,但你可以移动 customerLocation
出到自己的收藏。然后你将一个 DocumentReference 存储到 customerLocation
内部request
.
您还可以使用 document('requests/{requestId}').onUpdate()
创建云函数并检查城市是否发生了变化。如果有,那么把它改回那里。这将要求您跟踪您更改回属性的事实。否则,该函数将继续触发和翻转值。
关于firebase - Firestore 安全规则中嵌套映射中的引用字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66011621/