firebase - Firestore 安全规则中嵌套映射中的引用字段

标签 firebase google-cloud-firestore firebase-security

我有这个数据结构:
enter image description here
并且需要一个规则,只允许在 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/

相关文章:

android - 如何修复 android 4.4.2 错误 ClassNotFoundException : Didn't find class "com.google.firebase.provider.FirebaseInitProvider" on path: DexPathList

google-cloud-firestore - Firestore和自动递增ID

firebase - 当 Internet 连接恢复时,Firestore 不会立即开始监听更改

firebase - 哪条规则允许我防止在 firebase 上通过电子邮件/id 重复插入?

swift - Firestore:如何在集合中获取随机文档

java - 使用 Firebase 存储文件夹中的图像填充数组

javascript - firestore transaction.set(ref, data, {merge : true}) and transaction. update(ref, data) 之间有什么区别?

google-cloud-firestore - 在 Firestore 安全规则中,如何将数组值与映射键进行比较?

django - 使用自定义身份验证时如何为 Firebase 编写安全规则?

firebase - Firestore - 单个测试用户导致 50K+ 读取