1

Я разрешаю логин с Google в свое веб-приложение Firebase. я контролировать доступ к базе данных по auth.uid:Управление разрешениями группы и разрешение двум пользователям сформировать одну и ту же команду для доступа к узлу

{ 
    "rules": { 
    "users": { 
     "$uid": {   
      ".read": "auth.uid === $uid", 
      ".write":"auth.uid !== null", 
      "images": { 
       ".read": "auth.uid === $uid", 
       ".write":"auth.uid === $uid", 
     }, 
... 

Я хочу, чтобы дать возможность другим пользователям в команде пользователя, чтобы получить доступ к его/ее изображения. Я просмотрел документы, но не смог найти способ сделать это. Есть идеи?

+2

Я настоятельно рекомендую проверить «5 опрятных разговоров с Firebase» от Google I/O, где Тодд охватывает именно этот сценарий в [опрятном трюке # 2] (https://youtu.be/5hYMDfDoHpI?t=9m13s). –

+0

аккуратный трюк # 2, точно! – Guy

ответ

2

Правила безопасности могут считывать данные из других ключей, поэтому можно создавать правила, основанные на существовании ключа (т. Е. Членства в команде).

Что ниже небольшой фрагмент из Bolt правил, которые я использовал для Firebase базы данных:

path /teams/{$teamKey}/members/{$userId} is Boolean { 
    ... 
} 

path /users/{$userId}/shares/{$teamKey} { 
    ... 
    read() { root.teams[$teamKey].members[auth.uid] !== null } 
} 

JSON будет выглядеть примерно так:

... 
"users": { 
    "$userId": { 
    ... 
    "shares": { 
     "$teamKey": { 
     ... 
     ".read": "root.child('teams').child($teamKey).child('members').child(auth.uid).val() != null", 
     ... 

Будем надеяться, что сделать какой-то смысл. В принципе, есть ключ для команды, и он содержит идентификаторы пользователя (с булевыми значениями). И доступ к доступу к общей информации под ключ пользователя предоставляется другим членам команды, проверяя их принадлежность, то есть путем проверки наличия ключа идентификатора пользователя под ключом команды. По сути, вы храните данные, которые управляют правилами безопасности в самой базе данных.

Вам не нужно использовать болт, но мне гораздо проще управлять, чем представление JSON. Документация по языку Bolt содержит информацию о RuleDataSnapshot Methods как для определения болтов, так и для определений JSON.

+0

Спасибо, ты ответ ясен. Предоставляете ли вы полномочия для добавления членов команды в конкретный uid? – Guy

+0

Да. Вы можете расширить концепцию, насколько вам нужно ее принять. Когда пользователь создает команду, они становятся владельцем, и у владельца есть права на запись для них членов команды. Вы также можете использовать механизм для управления разрешениями на чтение - чтобы только члены команды могли видеть других участников. – cartant