cerbere_admin 0.1.0+5
cerbere_admin: ^0.1.0+5 copied to clipboard
Flutter admin package for roles and permissions with Firebase. Companion to cerbere; requires Firebase Admin SDK for user management.
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.
