Введение

Эта статья включает скрипт 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();
}