gpt4 book ai didi

firebase - firestore规则路径的大小

转载 作者:行者123 更新时间:2023-12-03 06:42:14 25 4
gpt4 key购买 nike

我尝试在 firestore 规则中使用路径的大小,但无法让任何东西发挥作用,并且在 firestore 文档中找不到有关如何执行此操作的任何引用。

我想使用最后一个集合名称作为规则中的参数,因此尝试了以下方法:

match test/{document=**}
allow read, write: if document[document.size() - 2] == 'subpath';

但是 .size() 似乎不起作用,.length 也不起作用

最佳答案

这是可以完成的,但您首先必须将路径强制为字符串。

要获取当前资源的路径,可以使用__name__属性。

https://firebase.google.com/docs/reference/rules/rules.firestore.Resource#name

仅供引用,resource 是一个通用属性,可用于表示正在读取或写入的 Firestore 文档的每个请求。

https://firebase.google.com/docs/reference/rules/rules.firestore.Resource

resource['__name__']

__name__ 返回的值是一个 Path,它缺乏有用的方法,因此在使用 size 之前,您需要将 Path 强制为字符串。

https://firebase.google.com/docs/reference/rules/rules.String.html

string(resource['__name__'])

转换为字符串后,您可以使用 / 运算符拆分字符串,并将其转换为字符串路径部分的List .

https://firebase.google.com/docs/reference/rules/rules.String.html#split

string(resource['__name__']).split('/')

现在您可以使用列表的 size 方法检索列表的大小。

https://firebase.google.com/docs/reference/rules/rules.List#size

string(resource['__name__']).split('/').size()

Firestore 规则的一个挑战性问题是不支持变量,因此当您需要多次使用结果时,您经常会重复代码。例如,在这种情况下,我们需要使用两次分割的结果,但不能将其存储到变量中。

string(resource['__name__']).split('/')[string(resource['__name__']).split('/').size() - 2]

您可以通过使用函数并将参数用作变量来稍微简化一下。

function getSecondToLastPathPart(pathParts) {
return pathParts[pathParts.size() - 2];
}

getSecondToLastPathPart(string(resource['__name__']).split('/'))

将它们结合在一起形成您的解决方案,它看起来像这样......

function getSecondToLastPathPart(pathParts) {
return pathParts[pathParts.size() - 2];
}

match test/{document=**} {
allow read, write: if getSecondToLastPathPart(string(resource['__name__']).split('/')) == 'subpath';
}

希望这有帮助!

关于firebase - firestore规则路径的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49193264/

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