2016-11-28 4 views
2

У меня есть семья, A, b, c, d и A является лидером. У нас есть злоумышленник, E. Мы хотим только b, c, d для чтения/записи данных A.Firebase права для чтения/записи для определенных пользователей

Все письма (б, д, ...) будет UID-х

Вот то, что я до сих пор:

Каждый проверку подлинности с электронной почтой. Люди отправляют запросы A, которые разрешены в его группе. Если он согласится, они могут читать/писать ему.

Дизайн для базы данных Firebase

{ 
    "Leaders" : { 
    "A" : { 
     "ALLOWED" : { 
     "b" : 0, 
     "c" : 0, 
     "d" : 0 
     }, 
     "DATA" : { 
     "blah blah1" : "content writable by bcd", 
     "blah blah2" : "content writable by bcd" 
     }, 
     "REQUESTS" : { 
     "E" : 0 
     } 
    } 
    } 
} 

я могу использовать CRUD для перемещения б, в, г, но как я устанавливаю правила, так что отсюда следует, что только люди в ДОПУСКАЕМЫХ может читать/написать данные для каждого лидера?

{ 
    "rules": { 
    ".read": "auth != null", 
    ".write": "auth != null" 
    "Leaders":{ 
    ".write": "$uid == ????" 
    } 
    } 
} 

Спасибо за помощь!

+0

Вы включили изображение вашего дерева JSON в свой вопрос. Пожалуйста, замените это на фактический JSON как текст, который вы можете легко получить, нажав ссылку «Экспорт JSON» в консоли базы данных Firebase. Наличие JSON в качестве текста делает его доступным для поиска, позволяет нам легко использовать его для тестирования с вашими фактическими данными и использовать его в нашем ответе, и в целом это просто хорошая вещь. –

+0

@FrankvanPuffelen, ах! Извините, я не знал, что мы могли бы это сделать, обновим в мин. – DilllyBar

ответ

4

Должен быть предметом проверки, если узел существует в текущем лидере:

{ 
    "rules": { 
    "Leaders":{ 
     "$leaderuid": { 
     ".write": "$leaderuid == auth.uid", 
     "DATA": { 
      ".write": "data.parent().child('ALLOWED').child(auth.uid).exists()" 
     } 
     } 
    } 
    } 
} 

Что я изменил:

  • Удалить верхний уровень чтения правила/записи. В противном случае любой аутентифицированный пользователь может читать/записывать все данные, и вы больше никогда не сможете принять это разрешение на более низком уровне.
  • Лидер может написать весь свой узел. Здесь я использую auth.uid, как описано в documentation on securing user data.
  • Пользователь может писать только под DATA, если их uid существует в узле ALLOWED.
+0

Привет. Можете ли вы объяснить, что означает «$ leaderuid»? Большое спасибо за этот ответ – DilllyBar

+0

Я имею в виду, когда у вас $ leaderuid $ {}, что это за контекст? – DilllyBar

+0

Также возникает еще одна ошибка: ожидается, что на линии с «DATA» ожидается «,» – DilllyBar

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

  • Нет связанных вопросов^_^