我正在写信给 Firestore 并创建一个文档,其中有一个字段,该字段是一个非常简单的地图数组,例如
docField : [
{
name: 'Bob',
age: 42,
type: 'default'
}, ...
]
我想编写一个安全规则来验证地图字段及其请求内容。我知道我可以用类似的方法验证字段,
allow write:
if request.resource.data.name is string
&& ...
但是如何将其应用于数组字段的所有 N 个项目? 我见过一些人在长度已知的情况下对列表中的每个项目进行暴力破解,但我不知道我需要处理多少个项目 - 不是数百个,而是可能数十个。
我只能想到将每个地图放入子集合中自己的文档中,并为此编写规则,但这似乎需要对不需要它的数据执行大量写入操作。
有什么建议吗?
我见过有些人在长度已知的情况下对列表中的每个项目进行暴力破解,但我不知道我需要处理多少个项目
那是因为这确实是具有安全规则的唯一可能的解决方案。没有可用于迭代的循环或映射。安全规则系统被设计得小、快速且具有确定性,以便最大限度地减少性能问题(因为它们可能会拦截每个匹配的读取或写入)。循环未知大小的集合会违背这些目标。
我只能想到将每个地图放入子集合中自己的文档中,并为此编写规则,但这似乎需要对不需要它的数据执行大量写入操作。
考虑到上述限制,这可能是您唯一可行的解决方案。