2013-04-11 3 views
6

Мы хотели бы использовать Firepad в нашем (главным образом, не в Firebase) проекте, но у нас есть некоторые проблемы, которые определяют лучший способ подойти к проблеме.Firebase JSON Security and Arrays

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

Мы не хотим, чтобы пользователи могли редактировать Firepads групп, к которым они не принадлежат. Таким образом, как часть нашего токена аутентификации, мы решили, что мы попытаемся отправить по идентификатору пользователя и списку групп, к которым они принадлежат. Затем, используя систему безопасности Firebase JSON, мы можем проверить, что редактируемый Firepad находится в списке групп, к которым принадлежит пользователь.

Проблема в том, что система JSON, похоже, не принимает много команд. Нет indexOf, и я не могу назвать hasChild переменной auth.

Как мы можем гарантировать, что пользователи могут редактировать только Firepads групп, к которым они принадлежат, без переноса всех наших данных в Firebase? (Или сохранение двух копий базы данных - одна на MySQL и одна на Firebase)

ответ

9

Хитрость здесь заключается в том, чтобы использовать объект вместо массива для хранения групп (немного неудобно, я знаю. сделать это проще/интуитивно понятным). Так что в вашем токен аутентификации, вы бы хранить что-то вроде:

{ userid: 'blah', groups: { 'group1': true, 'group2': true, ... } } 

, а затем в правилах безопасности вы могли иметь что-то вроде:

{ 
    ... 
    "$group": { 
     ".read": "auth.groups[$group] == true", 
     ".write": "auth.groups[$group] == true" 
    } 
} 

И тогда пользователь будет иметь доступ на чтение/запись к/groups/< группа > только если < группа > находится в своем токене аутентификации.

+0

Бинго. Вероятно, я должен был подумать об этом, но полезно пояснить, что доступ к элементам с квадратными скобками полезен. Спасибо! –

+0

Майк, вы сделали какие-то улучшения в этой области? Существуют ли какие-либо документы, описывающие, какие функции доступны для переменной auth? – Samuel

+0

@Samuel Здесь нет особых изменений. В общем, auth не имеет каких-либо функций, это всего лишь данные вашего токена аутентификации. Доступна только «функция», если у вас есть строка в ваших данных auth, есть несколько методов для подстроки/соответствия регулярных выражений и т. Д .: https://www.firebase.com/docs/security/api/string/ –