一种更好的执行列表的方法

时间:2013-08-12 13:24:43

标签: firebase firebase-security

请考虑以下规则:

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

..这有点笨重。是否有更好的执行方式,或者我的整个方法是错误的?

3 个答案:

答案 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()",
    ...
}