Я использую правила Firebase для установки разрешений, и у меня возникли проблемы с настройкой правила, чтобы разрешить разрешение на запись для включения пользователя и любого администратора.Как вы можете использовать правила Firebase, чтобы разрешить пользователям и администраторам права на запись?
Ниже базы данных Я пытаюсь установить разрешения для:
'rules': {
'rankings': {
'user': {
'userShortenedAuthId': { //user's rankings },
'anotherShortenedAuthId': { //another user's rankings }
}
},
'admin': {
'adminAuthId': true
},
'users': {
'userAuthId': {
'rank': 'userShortenedAuthId'
},
'anotherAuthId': {
'rank': 'anotherShortenedAuthId'
}
}
}
Таковы правила в месте для этих данных:
"rankings":{
"user":{
"$rankId": {
".read": true,
".write": "auth != null && ((root.child('users/' + auth.uid + '/rank').val() == $rankId) || root.child('admin/' + auth.uid).exists())"
}
}
}
Я пытаюсь писать в «рейтинг/user/userShortenedId 'во время входа в систему под администратором, но я получаю отказ от разрешения с Firebase. (Записан, как пользователь работает просто отлично). Ошибка находится где-то в правиле 'rankings/user/$ rankId/.write'. Что меня сбивает с толку, я использую правило root.child ('admin /' + auth.uid) .exists()) в других местах для привилегий администратора и, похоже, тоже работает отлично.
Вот код, вызывающий ошибку разрешения.
firebase.database().ref('rankings/' + userShortenedAuthId).update({newPlayerKey:totalPlayers}))
.then(function(){
console.log('successfully updated user ranking');
})
.catch(function(err){
console.log('error updated user ranking', err);
});
Вам не хватает узла '' rules 'верхнего уровня. Это тот, кто присутствует в ваших реальных правилах (и просто отсутствует в опубликованном фрагменте)? Также: можете ли вы показать минимальный код, который воспроизводит сбой записи? –
@FrankvanPuffelen Правила верхнего уровня находятся на месте, просто не включены здесь. Я добавлю выше код, который вызвал ошибку. – tbone849
@FrankvanPuffelen NVM! Я понял, что пытаюсь достичь неправильного URL-адреса firebase ref. Это должно быть «rankings/user /» + userShortenedAuthId. – tbone849