2016-08-30 4 views
0

В моем приложении для Android с Firebase as backend Я планирую иметь три роли на основе безопасности. User, Editor, AdministratorОпределение ролей пользователей в Firebase

Любой пользователь, подписавшийся на Facebook, по умолчанию получает роль пользователя.

  • Пользователь может читать все, но имеет очень ограниченные права на запись (provide reviews).
  • Редактор может читать что угодно и имеет больше разрешений на запись, чем пользователь (create articles, provide reviews).
  • Администратор может create/Delete Editors.

Администратор может обновить роль пользователя в редакторе и наоборот. Следовательно, создаются роли пользователя и роли редактора. Но как создать администратора в первую очередь?

С уважением

ответ

0

Это зависит от того, что делает кто-то администратор. Если вы хотите явно управлять списком администраторов спереди, вы можете просто просмотреть их в консоли Firebase и скопировать их uid в свои правила безопасности.

".write": "auth.uid == 'theUidThatYouLookedUp" 

Или один уровень лучше было бы держать только для чтения, список администратора в базе данных и относятся к тому, что в правиле:

".write": "root.child('admins').child(auth.uid).exists()" 

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

"chatRooms": { 
    "$chatRoomId": { 
    ".write": "root.child('chatRoomOwners').child($chatRoomId).val() == auth.uid" 
    } 
} 
+0

Спасибо за ответ. Роль администратора, в моем случае, заключается только в том, чтобы добавлять/удалять Редакторов, которые могут создавать статьи. Администратор не может быть автоматически сгенерирован. Следовательно, третий вариант можно исключить. – user3314337

+0

Ваш первый вариант очень прост. Поскольку количество админов будет очень мало, работа с этим вариантом не будет проблемой.Однако это не помогает добавлять редакторов (хотя добавление редакторов не было частью вопроса, а только для аргумента), так как будет больше редакторов, сравниваемых с админами. Заглянуть в Консоль для каждого Редактора будет немного утомительно - следовательно, не будет никакой пользы для добавления редакторов. Использование отдельного узла для 'admins' или' Editors' кажется хорошим. Но опять же, как добавить пользователей в узел 'admins' или' Editors' ?. Прошу прощения, если мой вопрос слишком прост. – user3314337

+0

Способ, которым у Фрэнка есть админ-узел в базе данных и существует ли ребенок, вы хотите сделать это для редакторов. Вы не хотите, чтобы он был доступен только для чтения, хотя в вашем приложении, когда вы контролируете создание/удаление редакторов, вы хотите обновить узел базы данных и добавить auth.uid для редактора. Правило, однако, остается тем же – PatrickWalker

0

Firebase только что запустил поддержку на основе ролей доступа по любому пользователю через претензии пользовательских пользователей на ID маркеров: https://firebase.google.com/docs/auth/admin/custom-claims

Вы бы определить правила доступа администратора:

{ 
    "rules": { 
    "adminContent": { 
     ".read": "auth.token.role === 'admin'", 
     ".write": "auth.token.role === 'admin'", 
    } 
    } 
} 

Установить пользователь роль в Административном SDK:

// Set admin privilege on the user corresponding to uid. 
admin.auth().setCustomUserClaims(uid, {role: 'admin'}).then(() => { 
    // The new custom claims will propagate to the user's ID token the 
    // next time a new one is issued. 
}); 

Это будет распространяться к предъявляемым токенам идентификатора пользователя.

Чтобы проанализировать его из токена на клиенте, вам необходимо base64 декодировать полезную нагрузку маркера ID.

Вы можете обновить/понизить пользователей по мере необходимости. Установка роли редактора выполняется по той же концепции.

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