我正在尝试实施一个Firestore安全规则,该规则将验证在地图内部创建时创建的所有条目。但是,我有一个问题,我不知道地图的键。我有这样的东西:
{
"name": "Tom",
"answers": {
"SomeUUID": {
"answer": "Alps",
"right": true
},
"AnotherUUID": {
"answer": "Mount Everest",
"right": false
}
}
}
要使用安全规则验证条目,我会做类似的事情
rules_version = "2"
service cloud.firestore {
match /databases/{database}/documents {
match /answers/{answerID} {
allow read;
allow create: request.resource.data.name is string && request.resource.data.answers is map
}
}
如何在不知道地图或键的大小的情况下进一步验证成员地图的内容?是否可以使用通配符作为密钥?每个创建的键的值应相同。我想做这样的事情:
allow create: request.resource.data.name is string && request.resource.data.answers &&
request.resource.data.member.$(wildcard).keys().size() == 2 && request.resource.data.member.$(wildcard).answer is string && request.resource.data.member.$(wildcard).right is bool
这是否可行,还是需要更改整个逻辑?可能有通配符吗?
答案 0 :(得分:1)
如果您不知道字段名称,则无法检查其内容。安全规则中没有通配符或迭代器可让您发现随机事物。
如果必须保留此文档结构和验证逻辑,请考虑将文档数据发送到您控制的后端,并使用服务器端逻辑来确定数据是否有效。