2016-10-18 4 views
0

Я хочу сделать разные разрешения для разных ролей пользователей.Правила базы данных Firebase: разрешение пользователей

Например, если пользователь не является супер-владельцем, не позволяйте ему писать в моей таблице товаров.

Это то, что я пытался сделать:

{ 
    "rules": { 
    "items": { 
     ".write": "auth.authority == 'super-owner'" 
    } 
    } 
    } 

Но я заметил, что authority поле хранится в моем users узле я создал сам по себе и в Сопутствующие Firebase auth. Как я могу получить доступ к users->authority текущего пользователя, зарегистрированного по правилам?

Обновление: Я попытался это:

".read": "root.child('users/'+auth.uid).authority.exists()", 

, но я получаю Ошибка сохранения правила - строка 10: Нет такой метод/свойство 'власть'.

ответ

2

Вы получаете эту ошибку, потому что root.child('users/'+auth.uid) возвращает экземпляр DataSnapshot, который не имеет authority собственности, конечно. Но у него есть метод .

Полный список методов, относящихся к DataSnapshot, перейдите по следующей ссылке.

https://firebase.google.com/docs/reference/js/firebase.database.DataSnapshot.

Попробуйте это.

".read": "root.child('users/'+auth.uid).hasChild('authority')", 
".write": "root.child('users/'+auth.uid).hasChild('authority') && root.child('users/'+auth.uid+'/authority').val() == 'super-owner'" 

или это

".read": "root.child('users/'+auth.uid+'/authority').exists()", 
".write": "root.child('users/'+auth.uid+'/authority').exists() && root.child('users/'+auth.uid+'/authority').val() == 'super-owner'" 

или короткая версия

".read": "root.child('users/'+auth.uid+'/authority').val() !== null", 
".write": "root.child('users/'+auth.uid+'/authority').val() == 'super-owner'" 
+0

А как насчет стоимости? Как я могу говорить, если это супер-владелец? – TheUnreal

+0

root.child ('users /' + auth.uid) .hasChild ('authority') && root.child ('users /' + auth.uid + '/ authority'). Val() == 'super-owner' –

+0

Ознакомьтесь с моим обновленным ответом. –

Смежные вопросы