cerbere 0.1.0+1 copy "cerbere: ^0.1.0+1" to clipboard
cerbere: ^0.1.0+1 copied to clipboard

Gestion des rôles et autorisations Flutter avec Firebase Auth et Firestore. Vérification de permissions, widgets conditionnels et modèles (Cerbère).

Cerbère #

Package Dart/Flutter pour gérer les rôles et les droits avec Firebase Auth et Firestore.

Description #

Cerbère est un package qui permet de gérer un système de rôles et de droits basé sur Firebase Auth et Firestore. Il fournit notamment :

  • Un registre de droits avec modèles CerbereDroit (clé, nom, description)
  • Une vérification de permissions synchrone ou en stream via CerbereService
  • Des widgets conditionnels selon les droits (CerbereWidgetVerifie)
  • Des repositories Firestore pour rôles et utilisateurs (_cerbere_roles, _cerbere_utilisateur)

Pour gérer les droits (création et édition des rôles, attribution des rôles aux utilisateurs via une interface d’administration), utilisez le package complémentaire cerbere_admin.

Installation #

Ajoutez cerbere à votre pubspec.yaml :

dependencies:
  cerbere: ^0.1.0

Puis :

flutter pub get

Initialisation #

Dans votre main.dart, enveloppez votre application avec CerbereInitWidget :

import 'package:cerbere/cerbere.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:cloud_firestore/cloud_firestore.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Initialisation Firebase
  await Firebase.initializeApp(...);

  // Liste des droits disponibles (CerbereDroit : cle, nom, description)
  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',
    ),
    // Ajoutez tous vos droits ici
  ];

  runApp(
    CerbereInitWidget(
      firebaseAuth: FirebaseAuth.instance,
      firestore: FirebaseFirestore.instance,
      droits: droits,
      child: MyApp(),
    ),
  );
}

Important : Si vous utilisez un autre widget d’initialisation (par exemple pour un back-office), la liste des droits doit être la même. Le package vérifie la cohérence et lance une exception si les listes diffèrent.

Structure des collections Firestore #

Le package utilise deux collections Firestore :

_cerbere_roles #

Collection des rôles. Chaque document contient :

{
  'uid': 'string',
  'nom': 'string',
  'droits': ['can_edit_users', 'can_delete_users', ...] // Liste de clés de droits (strings)
}

_cerbere_utilisateur #

Collection des associations utilisateur–rôle. Chaque document contient :

{
  'utilisateurUid': 'string', // ID du document = utilisateurUid
  'roleUid': 'string'
}

Les droits ne sont pas stockés dans Firestore ; ils sont définis dans le code via CerbereInitWidget (liste de CerbereDroit).

Utilisation #

Vérification de permissions #

Avec un widget conditionnel

CerbereWidgetVerifie(
  cle: 'can_edit_users',
  child: ElevatedButton(
    onPressed: () {
      // Action autorisée
    },
    child: Text('Éditer les utilisateurs'),
  ),
)

Vous pouvez optionnellement fournir loadingWidget et deniedWidget.

Avec une vérification manuelle

final service = context.read<CerbereService>();

// Vérification synchrone
final hasPermission = await service.cerbereVerifie('can_delete_users');
if (hasPermission) {
  // Action autorisée
}

// Vérification en temps réel (stream)
service.cerbereStreamVerifie('can_edit_users').listen((hasPermission) {
  if (hasPermission) {
    // Action autorisée
  }
});

Définition des droits #

Les droits sont définis à l’initialisation sous forme de liste de CerbereDroit (cle, nom, description). Pour vérifier un droit dans le code, utilisez sa clé (string) :

CerbereWidgetVerifie(
  cle: 'can_edit_users',
  child: ElevatedButton(...),
)

Création de rôles et attribution aux utilisateurs #

Pour gérer les droits (créer/éditer les rôles, attribuer les rôles aux utilisateurs), utilisez le package complémentaire cerbere_admin, qui fournit une interface d’administration. Sinon, les rôles peuvent être créés et assignés via les repositories exposés par ce package (CerbereRoleRepository, CerbereUtilisateurRepository) ou directement dans Firestore.

Sécurité #

Ce package ne gère pas les règles Firestore. Vous devez configurer les règles dans votre projet pour protéger les collections _cerbere_*.

Exemple de règles (à adapter) :

match /_cerbere_roles/{document=**} {
  allow read: if request.auth != null;
  allow write: if request.auth != null
    && /* votre logique (ex. rôle admin) */;
}

match /_cerbere_utilisateur/{document=**} {
  allow read: if request.auth != null;
  allow write: if request.auth != null
    && /* votre logique */;
}

Licence #

Voir le fichier LICENSE à la racine du dépôt.

1
likes
0
points
5
downloads

Documentation

Documentation

Publisher

unverified uploader

Weekly Downloads

Gestion des rôles et autorisations Flutter avec Firebase Auth et Firestore. Vérification de permissions, widgets conditionnels et modèles (Cerbère).

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

cloud_firestore, equatable, firebase_auth, flutter, flutter_bloc

More

Packages that depend on cerbere