Firebase реального времени DB безопасности из приложения JS.
Я разрешаю разрешение на чтение для всех пользователей с паролем. Затем, для всех других типов (только анонимный, по моей схеме), я хочу разрешить чтение только для определенных /bundles/.
Это правила -
{
"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".
.read
не работает, потому что вы пытаетесь получить доступ к местоположению /bundles
. Если вместо этого вы запросите конкретный пакет напрямую, он пройдет:
// read denied
ref.child('bundles').once('value')
// read allowed
ref.child('bundles/-L-2BbIkAg6J9WPMaJpJ').once('value')
Вы не сможете фильтровать данные по правилам Firebase, как указано в этом разделе документации Firebase. Я предлагаю вам обновить схему и предоставить отдельный узел для ваших анонимных пакетов, например:
{
"rules": {
".read": "auth != null && auth.provider == 'password'",
"anonymousBundles": {
".read": "auth != null"
}
}
}
ref.child('bundles').once('value')
?