firebase防止子删除不起作用

时间:2016-06-24 14:23:01

标签: firebase firebase-realtime-database firebase-security

我有这个架构

"Photo": {
  "$User": {
    "$Photo": {
      ".validate": "auth.uid == $User && ((newData.hasChildren(['created', 'updated', 'image', 'title']) && data.val() == null && newData.val() != null) || data.val() != null && newData.val() != null && newData.child('updated').val() != null)",
      "created": {
        ".validate": "newData.isNumber() && data.val() == null && newData.val() != null && newData.val() == now"
      },
      "updated": {
        ".validate": "newData.isNumber() && newData.val() == now"
      },
      "image": {
        ".validate": "newData.isString() && data.val() == null && newData.val() != null"
      },
      "title": {
        ".validate": "newData.isString() && newData.val().length > 3"
      },
      "$other": {
        ".validate": "false"
      }
    }
  }
}

如果您看到我的验证规则

 ".validate": "auth.uid == $User && ((newData.hasChildren(['created', 'updated', 'image', 'title']) && data.val() == null && newData.val() != null) || data.val() != null && newData.val() != null && newData.child('updated').val() != null)"

我只为写入和更新写了一个权限,但是当我删除一个节点时我可以删除它。我的目标是阻止删除。为什么这个?哪里有错误?提前谢谢

1 个答案:

答案 0 :(得分:0)

为此,您需要使用.write规则,而不是.validate规则。 From the docs

  

此外,删除数据时(即,当写入的新值为null时)将忽略验证定义。