请考虑以下规则:
"list" : {
"$item" : {
".validate": "newData.hasChildren(['field1', 'field2'])",
"field1" : {
".validate": newData.isString()
},
"field2" : {
".validate": newData.isString()
},
"$other" : {
".validate": false
}
}
}
}
它应该只允许您构建某种类型的对象列表。但是,没有什么可以阻止以下情况:
{
"list" : "i've been hacked"
}
我唯一能想到的就是将其添加到“列表”规则中:
".validate": "!newData.isString() && !newData.isNumber() && !newData.isBoolean()"
..这有点笨重。是否有更好的执行方式,或者我的整个方法是错误的?
答案 0 :(得分:0)
您只需将.write:false添加到列表本身,并仅在$ item上启用它。这样,如果不验证$ item规则,就无法写入列表。
答案 1 :(得分:0)
详细说明@ cwehrung的回答:
"list": {
".write": false,
"$item": {
".validate": "newData.hasChildren(['field1', 'field2'])",
"field1": {
".write": "newData.isString()"
},
"field2": {
".write": "newData.isString()"
}
}
}
答案 2 :(得分:0)
另一种选择:
"list": {
".validate": "newData.hasChildren()",
...
}