2016-09-20 4 views
0

Я использую правила 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); 
    }); 
+1

Вам не хватает узла '' rules 'верхнего уровня. Это тот, кто присутствует в ваших реальных правилах (и просто отсутствует в опубликованном фрагменте)? Также: можете ли вы показать минимальный код, который воспроизводит сбой записи? –

+0

@FrankvanPuffelen Правила верхнего уровня находятся на месте, просто не включены здесь. Я добавлю выше код, который вызвал ошибку. – tbone849

+0

@FrankvanPuffelen NVM! Я понял, что пытаюсь достичь неправильного URL-адреса firebase ref. Это должно быть «rankings/user /» + userShortenedAuthId. – tbone849

ответ

1

Нашел ответ на мой вопрос. Firebase ссылок URL, который ссылается при попытке обновить

firebase.database().ref('rankings/' + userShortenedAuthId).update({newPlayerKey:totalPlayers}))

на самом деле должно быть

firebase.database().ref('rankings/user/' + userShortenedAuthId).update({newPlayerKey:totalPlayers}))

Таким образом, правила были на самом деле работает правильно. Я просто пытался писать не туда.