import 'package:em2rp/providers/local_user_provider.dart'; import 'package:em2rp/views/login_page.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class AuthGuard extends StatelessWidget { final Widget child; final String? requiredPermission; final bool allowWhileLoading; const AuthGuard({ super.key, required this.child, this.requiredPermission, this.allowWhileLoading = false, }); @override Widget build(BuildContext context) { final localAuthProvider = Provider.of(context); final firebaseUser = FirebaseAuth.instance.currentUser; // Log pour débug print('[AuthGuard] Vérification accès - User: ${localAuthProvider.currentUser?.uid}, Permission requise: $requiredPermission'); // Si Firebase n'a pas encore restauré la session ou si le profil charge, // afficher un écran neutre plutôt que la page de connexion. if (firebaseUser != null && (localAuthProvider.currentUser == null || localAuthProvider.isLoadingUserData)) { if (allowWhileLoading) { return child; } return const Scaffold( backgroundColor: Colors.white, body: Center( child: CircularProgressIndicator(), ), ); } // Si l'utilisateur n'est pas connecté if (firebaseUser == null || localAuthProvider.currentUser == null) { print('[AuthGuard] Utilisateur non connecté, redirection vers LoginPage'); return const LoginPage(); } // Si la page requiert une permission spécifique et que l'utilisateur ne la possède pas if (requiredPermission != null && !localAuthProvider.hasPermission(requiredPermission!)) { print('[AuthGuard] Permission "$requiredPermission" refusée'); return Scaffold( appBar: AppBar(title: const Text("Accès refusé")), body: const Center( child: Text("Vous n'êtes pas autorisé à accéder à cette page."), ), ); } // Sinon, afficher la page demandée print('[AuthGuard] Accès autorisé, affichage de la page'); return child; } }