Безопасность и массивы 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/ только в том случае, если находится в их токене аутентификации.