Безопасность и массивы Firebase JSON
мы хотели бы использовать Firepad в нашем (в основном не размещенном Firebase) проекте, но у нас возникли проблемы с поиском лучшего способа решения проблемы.
в принципе, у нас много пользователей, и каждый пользователь может быть членом многих групп. У каждой из этих "групп" есть своя Firepad, которую пользователи могут редактировать. У нас уже есть глубоко разработанная структура базы данных с использованием MySQL и мы не хотим переносить наши пользовательские данные в Firebase прямо сейчас, поэтому мы решили, что получим больше творческий.
мы не хотим, чтобы пользователи могли редактировать Firepads групп, к которым они не принадлежат. Таким образом, в качестве части нашего токена аутентификации мы решили попробовать отправить идентификатор пользователя и список групп, к которым они принадлежат. Затем, используя систему безопасности Firebase JSON, мы можем проверить, что редактируемый Firepad находится в списке групп, к которым принадлежит пользователь.
проблема в том, что система JSON, похоже, не принимает много команд. Нет indexOf, и я не могу позвонить hasChild
на auth
переменной.
Как мы можем гарантировать, что пользователи могут редактировать только Firepads групп, к которым они принадлежат, без переноса всех наших данных в Firebase? (Или ведение двух копий базы данных - одной на MySQL и одной на Firebase)
1 ответов
трюк здесь заключается в использовании объекта вместо массива для хранения групп (немного неудобно, я знаю. Мы постараемся сделать это более понятным). Таким образом, в вашем токене auth вы храните что-то вроде:
{ userid: 'blah', groups: { 'group1': true, 'group2': true, ... } }
и тогда в ваших правилах безопасности вы можете иметь что-то вроде:
{
...
"$group": {
".read": "auth.groups[$group] == true",
".write": "auth.groups[$group] == true"
}
}
и тогда пользователь будет иметь доступ для чтения/записи к /groups/