翻转 OR 条件会在 Firebase 实时规则中返回错误的访问权限



我正在学习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不存在或nullauth.uid引发错误,从而导致操作被拒绝。

最新更新