Использование нескольких условий в правилах Firebase и доступ с помощью оператора if не работает - PullRequest
0 голосов
/ 20 мая 2019

У меня есть несколько условий в моих правилах firebase, и я хочу получить доступ к базе данных текущего пользователя, используя оператор if в моем операторе return. Когда я обращаюсь к нему по отдельности, он работает, но когда я использую операторы if, я не получаю данные, но возникает ошибка разрешения.

Я пытался получить к нему доступ, но продолжает сбой.

Мое правило:

"query.orderByChild == 'userId' && query.equalTo == auth.uid || 
root.child('admins').child(auth.uid).child('role').val() === 'admin'"

Доступ к данным:

let db = firebase.database().ref(`/items`).orderByChild('userId').equalTo(currentUser.uid)

if(firebase.database().ref('/admins').child(currentUser.uid).child('role').equalTo('admin')) {
  db = firebase.database().ref(`/items`)
 }

db
.once('value')
.then(snapshot => {
    let doc = []
    const data = snapshot.val();
    for (let key in data) {

      doc.push({
        ...data[key],
        key: key
      });
    }

В идеале я хотел бы иметь правило с OR и оператор if / else для возврата данных в зависимости от пользователя.

1 Ответ

0 голосов
/ 20 мая 2019

Это утверждение не делает то, что вы думаете, оно делает:

if(firebase.database().ref('/admins').child(currentUser.uid).child('role').equalTo('admin'))

Ничто в этой строке не читает из базы данных, а equalTo просто создает запрос, фактически он не выполняет никакой проверки.

Если вы хотите проверить, является ли пользователь администратором:

let userRoleRef = firebase.database().ref('/admins').child(currentUser.uid).child('role');
userRoleRef.once('value').then((snapshot) => {
  if ('admin' == snapshot.val()) {
    db = firebase.database().ref(`/items`)

    ... continue using db here
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...