Как защитить базу данных Firebase с помощью многопользовательской учетной записи

Все примеры показывают защиту базы данных Firebase с помощью одного пользователя. В моем приложении у меня есть несколько пользователей Firebase Auth, которые сгруппированы в учетную запись. Все пользователи учетной записи должны иметь доступ для чтения / записи к узлам, сгруппированным по идентификатору учетной записи.

Вот пример того, как он устроен:

- users
  - [user id1]
  - [user id2]
  - [user id3]
- accounts
  - [account id1]
     - [user id1]
     - [user id2]
  - [account id2]
     - [user id3]
- things
  - [account id1]
     - thing 1
     - thing 2
  - [account id2]
     - thing 3
     - thing 4

Я хочу, чтобы только пользователи, которые являются частью учетной записи, могли читать / писать «вещи» в своей собственной учетной записи. Таким образом, [user id1] и [user id2] должны иметь возможность читать / писать только «вещи» в узле [account id1]. Возможно ли это с помощью правил базы данных Firebase?


person Aaron    schedule 10.05.2018    source источник
comment
Это известно как безопасность на основе групп или ролевой безопасности.   -  person Frank van Puffelen    schedule 10.05.2018
comment
Спасибо @FrankvanPuffelen за то, что отправил мне правильный ответ!   -  person Aaron    schedule 10.05.2018


Ответы (1)


Комментарий Фрэнка к моему вопросу привел меня в правильное русло и привел к этой теме, где я нашел ответ, который мне был нужен:

https://stackoverflow.com/a/19524810/265333

В итоге я также сохранил [идентификатор учетной записи] с пользователем:

- users
  - [user id1]
     - [account id1]
  - [user id2]
     - [account id1]
  - [user id3]
     - [account id2]

Как только я это сделаю, я смогу написать такое правило базы данных:

"things":{
          "$acctid":{
            ".read": "auth != null && root.child('users').child(auth.uid).child('AccountId').val() == $acctid",
            ".write": "auth != null && root.child('users').child(auth.uid).child('AccountId').val() == $acctid"
          }
        }
person Aaron    schedule 10.05.2018