2016-08-28 2 views
0

У меня есть следующая форма базы данныхДоступ запрещен с правилами базы данных Firebase

Database 
    users 
     <UID> 
      user 
       <other information> 

Я пытаюсь прочитать все мои пользователи в режиме администратора и только позволяют отдельным пользователям доступ к своей информации.

Я пытаюсь это правило:

"users": { 
    "$uid": { 
     ".read": "auth != null && (auth.uid == $uid || root.child('users').child(auth.uid).child('user').child('admin').val() == true)", 
     ".write": "auth != null && !newData.child('admin').exists() && (auth.uid == $uid || root.child('users').child(auth.uid).child('user').child('admin').val() == true)" 
    }, 
    ".indexOn": ["userid"] 
}, 

я делаю следующий запрос, и я вижу следующее сообщение об ошибке:

allusers = $firebaseArray(firebaseDataService.root.child('users')); 

permission_denied at /users: Client doesn't have permission to access the desired data.

Любая идея, что я делаю неправильно здесь?

ответ

2

При подключении слушателя к /users сервер Firebase проверяет, имеете ли вы разрешение на чтение на /users. Если нет, он отклоняет слушателя.

Это общий источник путаницы для разработчиков, новых для Firebase. Исходя из мышления SQL/отношения, мы используем защиту для выполнения (серверной) фильтрации. В Firebase вы не можете использовать правила безопасности для фильтрации данных.

Я добавлю несколько соответствующие ссылки ниже для дальнейшего чтения:

+0

Frank, я не использую правила безопасности для фильтрации данных. Для отдельных пользователей я перехожу к конкретным узлам. Для администраторов я перехожу к/пользователям. Я стараюсь, чтобы только админы могли идти и читать все пользовательские данные, а не кто-либо еще. – Ahsan

+0

Если вы хотите дать администратору доступ к '/ users', для этого нужно' .read' использовать правило '/ users'. –

+0

Не знаю, почему я этого не делал. Работает для меня сейчас, когда я добавил его. благодаря – Ahsan