40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			40 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:em2rp/providers/local_user_provider.dart';
 | |
| import 'package:flutter/material.dart';
 | |
| import 'package:provider/provider.dart';
 | |
| import 'package:em2rp/views/login_page.dart';
 | |
| 
 | |
| class AuthGuard extends StatelessWidget {
 | |
|   final Widget child;
 | |
|   final String? requiredPermission;
 | |
| 
 | |
|   const AuthGuard({
 | |
|     super.key,
 | |
|     required this.child,
 | |
|     this.requiredPermission,
 | |
|   });
 | |
| 
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     final localAuthProvider = Provider.of<LocalUserProvider>(context);
 | |
| 
 | |
|     // Si l'utilisateur n'est pas connecté
 | |
|     if (localAuthProvider.currentUser == null) {
 | |
|       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!)) {
 | |
|       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
 | |
|     return child;
 | |
|   }
 | |
| }
 |