gpt4 book ai didi

firebase - Firestore 安全规则 - 更新数组字段 - 仅允许推送 (arrayUnion)

转载 作者:行者123 更新时间:2023-12-05 03:57:21 24 4
gpt4 key购买 nike

是否可以只允许压入数组字段(在文档中),但阻止写入该数组中的任何现有值?

myDocument: {
myArray: [
"value1",
"value2"
]
}

我想在 myArray 中添加 "value3"。我打算使用 firestore documentation 中提出的这种方法。

但我想阻止对 myArray 字段的任何其他更新,除了上面的那个,我没有找到一种优雅的方法来使用云 firestore 安全规则来做到这一点。

如果正在使用 arrayUnion 更新 myArray 字段并阻止所有其他更新请求,是否有办法接受更新?

最佳答案

因为永远不会太晚!

这是我的解决方案!为了只允许使用 arrayUnion 更新字段,我使用了两个东西:

  • .size() 检查用户是否更新数组只添加一个元素,所以我检查新数组的大小是否等于旧数组的大小 + 1 👌

request.resource.data.offers.size() == resource.data.offers.size() + 1

  • .hasAll 以确保用户只添加新值而不编辑现有值(非常重要的一点 ⚠️)

request.resource.data.offers.hasAll(resource.data.offers)

最终版本提供的是我的数组,它只接受 arrayUnion 作为更新 👇

match /swaps/{swapId} {
allow create: if request.auth != null;
allow read: if request.auth != null;
allow update: if (
request.resource.data.offers.size() == resource.data.offers.size() + 1
&& request.resource.data.offers.hasAll(resource.data.offers)
);
allow delete: if false;
}

关于firebase - Firestore 安全规则 - 更新数组字段 - 仅允许推送 (arrayUnion),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58616438/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com