2013-12-15 4 views
5

В примерах в документах с использованием firebase подразумевается ручное обновление правил безопасности firebase. Как правила безопасности могут быть модифицированы программно для поддержки реальных приложений в реальном мире? В используемом случае, который я рассматриваю, требование заключается в том, чтобы пользователь мог приглашать других пользователей для совместной работы/обмена выбранными данными и предоставления/отзыва доступа к соавторам. Как это можно сделать с помощью firebase?Как программно изменить правила безопасности в Firebase?

ответ

8

Вы фактически не должны программно изменять свои правила безопасности. Вы должны думать о них как код и изменять их только во время развертывания.

Если то, что вы пытаетесь сделать, это изменить то, что на самом деле разрешено делать пользователям, вы должны сделать это, написав правила безопасности, которые зависят от данных в вашей Firebase.

Например, можно сказать, что вы хотите ограничить доступ к части данных только пользователям из определенной группы. Вместо изменения правил безопасности каждый раз, когда членство в группе менялось, вы просто сохраняете группу в Firebase и проверяете правила безопасности, чтобы убедиться, что текущий пользователь находится в этой группе, прежде чем разрешить доступ.

".read" : "root.child('groups').child($groupID).child(auth.userid).exists()" 

Таким образом, членство в любое время группа изменения, пользователи автоматически получают доступ к данным, они должны иметь возможность видеть.

Для более сложного примера правил безопасности ознакомьтесь с файлом rules.json в Firefeed.

+1

благодарит за быстрый ответ. Использование групп для обработки динамически обновляемого пользователя имеет смысл. Но как будут обрабатываться динамически добавленные данные? Например, пользователь может создать проект под/users/userid/projects/projectid, а затем хочет предоставить доступ для чтения для этого конкретного проекта группе соавторов. Как это будет достигнуто с помощью Firebase? – Jarnal

+1

Настройка группы была всего лишь примером. Вам не нужно иметь группы - вы можете зависеть от любых данных, которые вам нравятся. Например, сам набор данных может иметь «читаемый» флаг, который, если он установлен в true, позволяет любому читать его. Или у него может быть «читаемый» список пользователей, которым разрешено его использовать. Etc ... –

+1

@AndrewLee, у меня более сложный случай: я создаю комнаты (ветви) динамически, и я хочу ограничить каждую комнату только конкретными сотрудниками Х, блокируя всех остальных от написания там. Как я могу указать эти права доступа при создании комнаты? Обратите внимание, что могут быть миллионы разных комнат. –

0

Но как будут обрабатываться динамически добавленные данные?

Вы бы сделали это, используя дочерний узел $. Это выглядит примерно так:

Вот моя база данных

users 
- userIDHere 
    - name: John Doe 
    - whatever: who knows 

И вы должны установить правила для каждого пользователя, делая это:

{ 
    "rules": { 
    "users": { 
     "$user": { 
     // whatever rules you want here, and you can reference $user to get the user's id. 
     } 
    } 
    } 
} 

Надежда это то, что вы просили, и надежда это помогает!

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