Cerbère Admin
Package Flutter complémentaire de cerbere pour la gestion administrative des rôles et droits avec Firebase Admin SDK.
- cerbere : rôles et autorisations dans une app classique (sans Admin SDK).
- cerbere_admin : back-office admin (utilisateurs, rôles, droits) avec liste des utilisateurs Firebase Auth via Admin SDK.
Fonctionnalités
- Pages d’administration : gestion des utilisateurs (et de leurs rôles), gestion des rôles et droits.
- Repository étendu :
CerbereUtilisateurAdminRepositoryavecgetAllFirebaseUsers()(Firebase Admin SDK). - Widget d’initialisation :
CerbereAdminInitWidgetpour brancher Auth, Firestore, Admin SDK et liste des droits. - Thème et layout : thème et layout dédiés pour une app admin cohérente.
Prérequis : ce package dépend de cerbere et nécessite Firebase Admin SDK (via dart_firebase_admin).
Installation
Depuis pub.dev (quand le package sera publié)
Ajoutez dans votre pubspec.yaml :
dependencies:
cerbere_admin: ^0.1.0
Puis :
flutter pub get
En développement local (monorepo / path)
Si vous travaillez avec des clones locaux de cerbere et dart_firebase_admin :
dependencies:
cerbere_admin:
path: ../cerbere_admin
Assurez-vous que cerbere et dart_firebase_admin sont résolus (par exemple via path ou dependency_overrides).
Configuration Firebase
- Firebase (Auth, Firestore) configuré côté client comme d’habitude.
- Firebase Admin SDK : initialisez une app Admin (compte de service) pour pouvoir lister les utilisateurs Auth. Utilisez le package dart_firebase_admin (ou équivalent).
Initialisation
Dans le main.dart de votre application d’administration, enveloppez l’app avec CerbereAdminInitWidget :
import 'package:cerbere_admin/cerbere_admin.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:dart_firebase_admin/dart_firebase_admin.dart';
import 'package:cerbere/cerbere.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(...);
final adminApp = FirebaseAdminApp.initializeApp(
'your-project-id',
Credential.fromServiceAccountParams(
email: 'your-service-account@project.iam.gserviceaccount.com',
clientId: 'your-client-id',
privateKey: 'your-private-key',
),
);
final droits = [
CerbereDroit(
cle: 'can_edit_users',
nom: 'Éditer les utilisateurs',
description: 'Permet d\'éditer les utilisateurs',
),
CerbereDroit(
cle: 'can_delete_users',
nom: 'Supprimer les utilisateurs',
description: 'Permet de supprimer les utilisateurs',
),
CerbereDroit(
cle: 'can_view_reports',
nom: 'Voir les rapports',
description: 'Accès aux rapports',
),
];
runApp(
CerbereAdminInitWidget(
firebaseAuth: FirebaseAuth.instance,
firestore: FirebaseFirestore.instance,
firebaseAdminApp: adminApp,
droits: droits,
langue: CerbereLangue.fr, // optionnel, défaut: CerbereLangue.en
child: MyAdminApp(),
),
);
}
Utilisation
Page de gestion des utilisateurs
Affiche la liste des utilisateurs (Firebase Auth via Admin SDK) et permet d’assigner ou retirer des rôles :
import 'package:cerbere_admin/cerbere_admin.dart';
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const CerbereUtilisateursPage(),
),
);
// Avec option d’affichage de la colonne "nom"
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const CerbereUtilisateursPage(colonneNom: true),
),
);
Helpers de navigation :
Navigator.of(context).push(CerbereUtilisateursPage.route());
// ou
Navigator.of(context).push(CerbereUtilisateursPage.page());
Page de gestion des rôles
Gestion des rôles et de leurs droits (création, édition, suppression) :
import 'package:cerbere_admin/cerbere_admin.dart';
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const CerbereRolesPage(),
),
);
// Ou
Navigator.of(context).push(CerbereRolesPage.route());
Repository étendu
CerbereUtilisateurAdminRepository étend CerbereUtilisateurRepository et ajoute :
getAllFirebaseUsers(): récupère la liste des utilisateurs Firebase Auth via Firebase Admin SDK.
Il est enregistré par CerbereAdminInitWidget ; vous pouvez le récupérer avec :
final repo = context.read<CerbereUtilisateurAdminRepository>();
final firebaseUsers = await repo.getAllFirebaseUsers();
API exportée
Le package exporte (via package:cerbere_admin/cerbere_admin.dart) :
| Export | Description |
|---|---|
CerbereAdminInitWidget |
Widget d’initialisation (Auth, Firestore, Admin SDK, droits). |
CerbereUtilisateurAdminRepository |
Repository utilisateur avec support Admin SDK. |
CerbereUtilisateursPage |
Page de gestion des utilisateurs et de leurs rôles. |
CerbereRolesPage |
Page de gestion des rôles et droits. |
Structure recommandée des packages
- cerbere : package de base (rôles, droits, permissions) pour une app classique, sans dépendance à Firebase Admin SDK.
- cerbere_admin : package pour l’app d’administration uniquement (utilisateurs, rôles, droits), avec Firebase Admin SDK.
Cela permet d’utiliser cerbere dans vos applications métier sans charger l’Admin SDK, et cerbere_admin uniquement dans l’application d’administration.
Dépendances
- cerbere : rôles et autorisations.
- dart_firebase_admin : Firebase Admin SDK pour Dart.
- flutter_bloc, equatable, uuid.
Tests
flutter test
Publication sur pub.dev
-
Publier d’abord les packages cerbere et dart_firebase_admin sur pub.dev (s’ils ne le sont pas déjà).
-
Dans
pubspec.yamlde cerbere_admin :- Remplacer les dépendances
pathpar des contraintes de version, par exemple :dependencies: cerbere: ^0.1.0 dart_firebase_admin: ^0.1.0 - Retirer ou commenter
publish_to: nonepour autoriser la publication sur pub.dev. - Décommenter et adapter les métadonnées (homepage, repository, issue_tracker, documentation, topics).
- Remplacer les dépendances
-
Vérifier la description (courte, en anglais recommandé pour pub.dev) et le
CHANGELOG.md. -
Dry-run puis publication :
dart pub publish --dry-run dart pub publish
Contribution
Les contributions sont les bienvenues. Ouvrez une issue ou une pull request sur le dépôt GitHub.
Licence
Ce projet est sous licence MIT. Voir le fichier LICENSE pour les détails.
Libraries
- cerbere_admin
- package qui gere les roles et les autorisation avec firebase (Cerbère admin, dépend Admin SDK)