我正在学习Firebase的安全规则,但是当我翻转OR条件时,我看到一些奇怪的东西,它返回true作为例外,否则返回错误
这是 JSON 树
{
"-LnOK0641vZRqJ1k5tCc" : {
"category" : "Sports",
"eq" : "ndndnjelwjdjrkeldnhfkelenjrkkeen",
"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()))"
}
火力基地拒绝退货
"$uid" : {
".read" : true,
".write" : "((auth.uid == root.child('Users').child(data.child('username').val()).child('uid').val()) || (!data.exists() && auth != null) )"
}
我只翻转或,结果不一样
编辑 当我使用管理员权限时,被拒绝的权限将返回允许的访问权限
当评估安全规则中的条件时出错时,整个规则将立即失败。
在第一个规则集中,您可以正确防范错误,因此规则引擎会评估:
!data.exists() && auth != null) ||
如果没有数据,也没有经过身份验证的用户,则允许操作(因为您有||
(。
在第二个规则集中,您的条件以以下内容开头:
auth.uid == ...
如果没有经过身份验证的用户,则auth
不存在或null
,auth.uid
引发错误,从而导致操作被拒绝。