我正在学习Firebase的安全性规则,但是当我翻转OR条件时,我看到了一些奇怪的东西,它返回true作为例外,否则返回错误
这是JSON树
{
"-LnOK0641vZRqJ1k5tCc" : {
"category" : "Sports",
"eq" : "ndndnjelwjdjrkeldnhfkelenjrkkee\n",
"id" : 4,
"instruction" : "nfhrjejwkldjfjejejhdhejejejejje",
"title" : "title11",
"username" : "bdjsjd"
},
"-LnOby-AZv2D-FkgBopU" : {
"category" : "Sports",
"eq" : "bdnwjksbxksndjejwldjjdjekwldnd",
"id" : 5,
"instruction" : "hejelwldhfhekekdhdjejekdk",
"title" : "bsndnfhdkwmsbdjs",
"username" : "bdjsjd"
},
"-LnOc2Y5DT5XvwJv6NJu" : {
"category" : "Sports",
"eq" : "ndnskajdhfiwldhdoelw",
"id" : 6,
"instruction" : "jsksksklfhfjejeksjfjiei",
"title" : "5ndnsjsndbdkwlaldhjd",
"username" : "bdjsjd"
}
}
Firebase规则返回数据时
"$uid" : {
".read" : true,
".write" : "((!data.exists() && auth != null) || (auth.uid == root.child('Users').child(data.child('username').val()).child('uid').val()))"
}
Firebase拒绝返回
"$uid" : {
".read" : true,
".write" : "((auth.uid == root.child('Users').child(data.child('username').val()).child('uid').val()) || (!data.exists() && auth != null) )"
}
我只翻转OR,结果不一样
编辑 当我使用管理员权限时,被拒绝的人将返回允许的访问权限
答案 0 :(得分:1)
在评估安全规则中的条件时出错时,整个规则将立即失败。
在第一个规则集中,您可以正确地防止错误,因此规则引擎将评估:
!data.exists() && auth != null) ||
如果没有数据,也没有经过身份验证的用户,则它将允许操作(因为您有||
)。
在第二个规则集中,您的情况始于:
auth.uid == ...
如果没有经过身份验证的用户,则不存在auth
或null
并且auth.uid
引发错误,从而导致操作被拒绝。