как реализовать контроль доступа на основе роли в firebase
Это мой первый набег на Firebase & nosql, я исхожу из фона SQL.
Использование простой учетной записи электронной почты для входа в систему, как ограничить доступ к данным в Firebase? Например, у некоторого пользователя будет доступ к созданию бизнес-объекта (пользователей, клиентов, категорий и т.д.), Другие - нет. Есть ли способ привязать список разрешений к переменной "auth"?
Ответы
Ответ 1
Невозможно присоединить разрешения непосредственно к переменной auth (или, по крайней мере, это не является предполагаемой стратегией). Я бы рекомендовал создать коллекцию пользователей, организованную auth.uid
и вы можете сохранить любые необходимые вам атрибуты разрешений, чтобы ваши правила безопасности могли выглядеть примерно так (непроверенные):
{
"rules": {
".read": true,
"users": {
".write": "root.child('users').child(auth.uid).child('role').val() == 'admin'"
}
}
}
Где role
- атрибут, принадлежащий ко всем объектам в вашей коллекции users
.
Ответ 2
Глядя на это снова через год, "пользовательские токены" могут быть лучшим вариантом.
https://www.firebase.com/docs/security/guide/user-security.html#section-custom
Ответ 3
Firebase запустила поддержку доступа на основе ролей для любого пользователя через пользовательские заявки на токен идентификатора: https://firebase.google.com/docs/auth/admin/custom-claims
Вы должны определить правило доступа администратора:
{
"rules": {
"adminContent": {
".read": "auth.token.admin === true",
".write": "auth.token.admin === true",
}
}
}
Задайте роль пользователя в SDK Firebase Admin:
// Set admin privilege on the user corresponding to uid.
admin.auth().setCustomUserClaims(uid, {admin: true}).then(() => {
// The new custom claims will propagate to the user ID token the
// next time a new one is issued.
});
Это будет распространяться на соответствующие требования к токенам идентификатора пользователя. Вы можете принудительно обновить токен сразу после: user.getIdToken(true)
Чтобы проанализировать его из токена на клиенте, вам нужно base64 расшифровать полезную нагрузку на токен ID: https://firebase.google.com/docs/auth/admin/custom-claims#access_custom_claims_on_the_client
Вы можете обновить/понизить пользователей по мере необходимости. Они также предоставили программный способ перечислить всех пользователей, если у вас есть повторяющиеся сценарии для изменения уровней доступа пользователей: https://firebase.google.com/docs/auth/admin/manage-users#list_all_users