Введение
Эта статья включает скрипт Node, реализующий настраиваемые утверждения Firebase Admin SDK. Вариант использования задокументировано.
Firebase Admin SDK поддерживает определение пользовательских атрибутов в учетных записях пользователей. Это дает возможность реализовывать различные стратегии управления доступом, включая управление доступом на основе ролей, в приложениях Firebase. Эти настраиваемые атрибуты могут предоставлять пользователям различные уровни доступа (роли), которые применяются в правилах безопасности приложения.
Обратите внимание, что правила безопасности должны быть реализованы для настраиваемых атрибутов, чтобы определить доступ на основе роли пользователя. Дополнительные сведения см. в разделе Управление доступом с помощью настраиваемых утверждений и правил безопасности. Например, если у вас есть атрибут администратора, добавленный к пользователю, правило Firestore так же просто, как
service cloud.firestore { match /databases/{database}/documents { match /{document=**} { allow read, write: if request.auth.token.admin == true; } } }
Предпосылки
Пользователь должен существовать в системе аутентификации Firebase, а на вашем компьютере должен быть установлен Firebase Admin SDK. Пакет Admin SDK использует учетную запись службы для аутентификации в вашем проекте Firebase. Инструкции см. в разделе Добавление Firebase Admin SDK на ваш сервер. Node.js можно скачать здесь.
Сценарий узла
Сценарий ниже ожидает, что пользовательский идентификатор пользователя будет единственным аргументом. UID — это идентификатор, назначаемый системой аутентификации Firebase, и его можно найти в консоли Firebase. Чтобы запустить скрипт, node admin-add <users-uid-here>
.
var admin = require('firebase-admin'); var serviceAccount = require("./<your-service-account-specific-string-here>.json"); var uid = process.argv[2]; if(uid){ admin.initializeApp({ credential: admin.credential.cert(serviceAccount), databaseURL: "https://<your-project-id-here>.firebaseio.com" }); return admin.auth().setCustomUserClaims(uid, {admin: true}).then(() => { console.log("Custom Claim Added to UID."); process.exit(); }).catch(function(error) { console.log('Error adding admin:', error); process.exit(); }); } else { return console.log("uid argument required"); process.exit(); }