Не существует API «Роли пользователя» для Firebase Auth, но есть способы, с помощью которых вы можете реализовать авторизацию на основе ролей в вашем приложении.
База данных
Одним из способов являетсяВы упомянули, чтобы сохранить эти данные в вашей базе данных.Преимущество этого заключается в том, что его легко реализовать.
Вы можете применить правила, выполнив поиск в ваших правилах базы данных для Firestore и базы данных реального времени.
{
"rules": {
"adminContent": {
".write": "root.child('users').child(auth.uid).child('admin').val() === true"
}
}
}
service cloud.firestore {
match /databases/{database}/documents {
match /articles/{article} {
allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true
}
}
}
Недостатком сохранения ваших ролей и учетных данных в базе данных является то, что вы не можете использовать эту информацию в разных продуктах.Вы не можете написать правило базы данных firestore, которое обращается к правилам RTDB или наоборот.
Настраиваемые утверждения
Если вы хотите, чтобы ваши роли работали между службами (используя одни и те же данные ролей в RTDB,Firestore и Firebase Storage), тогда вам следует изучить установку пользовательских утверждений, что очень хорошо объясняется в документации .
После настройки вы можете использовать настраиваемые утверждения для реализации роли.на основе или групповых прав доступа для разных продуктов.
database.rules.json
{
"rules": {
"adminContent": {
".read": "auth.token.admin === true",
".write": "auth.token.admin === true",
}
}
}
firestore.rules / storage.rules
Правила Firestore и Storage имеют похожий синтаксис для правил, и вы обнаружите, чтоallow
оператор одинаков для обоих.
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if request.auth.token.admin == true;
}
}
}