У меня следующий сценарий:
У меня есть организация, состоящая из нескольких команд, сотрудник может принадлежать к одной или нескольким командам.Менеджеры организации могут редактировать что угодно, а менеджеры команд могут редактировать только свою собственную команду, но никто другой и сотрудник не могут редактировать себя.Первоначально я разработал свою базу данных следующим образом:
/organization
/permissions
read: [uid1, uid2] (employees with full read and write access)
write: [uid1, uid2]
/employees
<employeeId>
/teams (the teams the user is part of)
teamId : true
/teams
<teamId>/
/permissions
read: [uid1, uid2] (team manager permission)
write: [uid1, uid2]
/members
employeeId:true
Документация Firebase рекомендует денормализовать базу данных, что предполагает следующий дизайн:
/organization
/permissions
/teams
/members
/permissions
/employees
/teams
Однако это делает правила безопасности намного более сложными, так какнасколько я могу понять.Например, чтобы проверить, кто может писать сотруднику, руководителю организации, руководителю группы или самому сотруднику, нам понадобится что-то вроде этого:
$employeeId:{
".write": { "data.authId === auth.uid" || **check that the auth.uid an organization manager or any of the team managers the user belongs to.**
Я не знаю, как сделать вторую проверку (выделено жирным шрифтом))
Моя схема сотрудника содержит следующие поля:
firstName
lastName
orgnanizationId
teams:
<teamId> : true
Буду признателен, если вы укажете мне правильное направление или поделитесь какой-нибудь информацией о том, как мне следует разрабатывать правила БД или правила безопасности.,Я уже проверял этот пост ранее, но он не ответил на мой вопрос.
Заранее спасибо!