来自JS应用的Firebase实时数据库安全性。
我允许所有密码验证用户获得读取权限。 然后,对于所有其他类型(只有匿名,根据我的方案),我想允许只读特定/捆绑/。
这些是规则 -
{
"rules": {
".read": "auth != null && auth.provider == 'password'", // working!
"bundles": {
"$bundle": {
".read": "data.child('anonymous').val() == true", // not working
}
},
}
}
和/ bundles -
"-L-2BbIkAg6J9WPMaJpJ": {
"anonymous": true,
"more_data": "data_1"
},
"-L-UHBr45eEUHGwsPWqq": {
"anonymous": false,
"more_data": "data_2"
}
我希望,当以匿名方式登录时,只能看到第一个包,但我从FB收到错误 - " permission_denied at / bundles"。
答案 0 :(得分:1)
.read
因您尝试访问/bundles
位置而失败。如果您直接查询特定的包,它将通过:
// read denied
ref.child('bundles').once('value')
// read allowed
ref.child(`bundles/-L-2BbIkAg6J9WPMaJpJ`).once('value')
您将无法通过Firebase规则过滤数据,如Firebase文档的this section中所述。我建议您更新架构并为匿名捆绑包提供单独的节点,例如:
{
"rules": {
".read": "auth != null && auth.provider == 'password'",
"anonymousBundles": {
".read": "auth != null"
}
}
}