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



我正在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 运算符并计算第二个表达式。显然我在语法上做错了,但我无法弄清楚。任何帮助都提前表示感谢。

您必须将string传递给.child,因此如果newData.child('group_ID').val()计算结果为nullundefined,那么它将失败。尝试将该结果转换为string,或者在查找之前测试该结果是否存在。(我推荐后者。

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

最新更新