2

请考虑以下规则:

"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()"

..这有点笨拙。有没有更好的方法来执行这一点,或者我的整个方法只是错误的?

4

3 回答 3

0

另外的选择:

"list": {
    ".validate": "newData.hasChildren()",
    ...
}
于 2013-08-13T21:22:38.767 回答
0

您可以将 .write: false 添加到列表本身,并仅在 $item 上启用它。这样,您不能在不验证 $item 规则的情况下写入列表。

于 2013-08-12T16:49:49.073 回答
0

详细说明@cwehrung 的回答:

"list": {
  ".write": false,
  "$item": {
    ".validate": "newData.hasChildren(['field1', 'field2'])",
    "field1": {
      ".write": "newData.isString()"
    },
    "field2": {
      ".write": "newData.isString()"
    }
  }
}
于 2013-08-12T18:52:15.487 回答