Firebase实时数据库安全无法读取关闭

时间:2018-05-09 14:49:56

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

我正在firebase中编写一个安全规则来验证帖子是否存在或组是否存在。我完全理解安全规则不是过滤器,我不是将其用作过滤器,而是用作验证度量标准。这是我试图实施的规则......

    "notifications": {
  ".read": "auth !== null",
  ".write": "auth !== null",
  ".indexOn": ["post_ID", "group_ID"],
  "$userID": {
    "$notifID": {
      ".validate": "newData.hasChildren(['has-seen', 'end-time', 'time', 'user_ID', 'username']) && $userID !== newData.child('sender_ID').val() && (root.child('groups').child(newData.child('group_ID').val()).exists() || root.child('follower-feed-storage').child(newData.child('post_ID').val()).exists())",
      ".write": "auth.uid !== $userID && !data.exists()",
    }
  }
},

显然,规则应该正确评估hasChildren和$ userID!== newData.child('user_ID')。val()条件。但是,当它应该评估&&&在括号内,它将基于括号内的第一个条件成功或失败,并且不执行or运算符并计算第二个表达式。显然我在做错了语法,但我无法弄明白。提前感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

您必须将string传递给.child,以便如果newData.child('group_ID').val()评估为nullundefined,则会失败。尝试将结果转换为string或在查找之前测试是否存在。 (我推荐后者。)

(newData.child('group_ID').exists() && root.child('groups').child(newData.child('group_ID').val()).exists())