gpt4 book ai didi

swift - updateData FieldValue.arrayUnion([value]) [swift] 的 Firebase Cloud Firestore 安全规则

转载 作者:行者123 更新时间:2023-12-02 00:06:27 27 4
gpt4 key购买 nike

我在 Cloud Firestore 中有一个文档。

“事件”字段的结构如下:

{
"events" : [
"eventID-1": [
"value1",
"value2"
],
"eventID-2": [
"value2",
"value3"
],
"eventID-3": [
"value3",
"value4"
]
]
}

enter image description here

更新[ swift ]:

self.db.collection("collection").document(document).updateData([
"events.eventID-1": FieldValue.arrayUnion([value2])
...

如何制定 Firebase Cloud Firestore 安全规则:

  1. 值(value)是独一无二的。也就是写的时候检查数组eventID-1,eventID-2,eventID-3....中是否不存在该值。

  2. 检查(长度)记录来的值

我只是想出了如何检查传入的数据,它是一张 map ,我们只得到一个值。

match /databases/{database}/documents {
match /collection/{documentID} {
allow write: if request.resource.data is map
&& request.writeFields.size() == 1
}
}

更新:已处理:

  1. 检查查询中的字符串长度
allow write : if request.resource.data.events.values()[0].size() < 100
  1. 检查列表中的唯一性
allow write : if (request.resource.data.events.keys()[0] in resource.data.events.keys()) == false

但是我还没有想出如何解决我的问题((((帮忙!!!

最佳答案

这是一个尝试:

allow write: if request.writeFields.size() == 1
&& geteventarray_after().size() == geteventarray_before().size() + 1 // Making sure that the size increased so that is is unique
&& getnewelement().size() < 100 // Making sure the new element size is < 100
&& getnewelement() is string // Other valdiations...

function getsubstr(str, from, to) {
return str[from:to];
}
function geteventarrayname() {
return getsubstr(input, "events.".size(), request.writeFields[0].size());
}
function geteventarray(map) {
return map.get(["events", geteventarrayname()], [])
}
function geteventarray_after() {
return geteventarray(request.resource.data);
}
function geteventarray_before() {
return geteventarray(resource.data);
}
function getnewelement() {
return geteventarray_after()[geteventarray_after().size()-1]; // It is added at the end
}

编辑:这是未经测试的,但应该是一个好的开始

关于swift - updateData FieldValue.arrayUnion([value]) [swift] 的 Firebase Cloud Firestore 安全规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60455280/

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