ajout auth guard
This commit is contained in:
parent
d3813bfcdb
commit
e5f7d8d2fd
@ -1,3 +1,4 @@
|
||||
import 'package:em2rp/utils/auth_guard_widget.dart';
|
||||
import 'package:em2rp/views/calendar_page.dart';
|
||||
import 'package:em2rp/views/login_page.dart';
|
||||
import 'package:firebase_auth/firebase_auth.dart';
|
||||
@ -15,6 +16,8 @@ void main() async {
|
||||
await Firebase.initializeApp(
|
||||
options: DefaultFirebaseOptions.currentPlatform,
|
||||
);
|
||||
await FirebaseAuth.instance.setPersistence(Persistence.LOCAL);
|
||||
|
||||
runApp(
|
||||
ChangeNotifierProvider(
|
||||
// Wrap MyApp with ChangeNotifierProvider
|
||||
@ -31,50 +34,56 @@ class MyApp extends StatelessWidget {
|
||||
Widget build(BuildContext context) {
|
||||
print("test");
|
||||
return MaterialApp(
|
||||
title: 'EM2 ERP',
|
||||
theme: ThemeData(
|
||||
primarySwatch: Colors.red,
|
||||
primaryColor: AppColors.noir,
|
||||
colorScheme:
|
||||
ColorScheme.fromSwatch().copyWith(secondary: AppColors.rouge),
|
||||
textTheme: const TextTheme(
|
||||
bodyMedium: TextStyle(color: AppColors.noir),
|
||||
title: 'EM2 ERP',
|
||||
theme: ThemeData(
|
||||
primarySwatch: Colors.red,
|
||||
primaryColor: AppColors.noir,
|
||||
colorScheme:
|
||||
ColorScheme.fromSwatch().copyWith(secondary: AppColors.rouge),
|
||||
textTheme: const TextTheme(
|
||||
bodyMedium: TextStyle(color: AppColors.noir),
|
||||
),
|
||||
// Personnalisation de l'InputDecorationTheme pour les text fields
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
focusedBorder: OutlineInputBorder(
|
||||
// Bordure lorsqu'il est focus
|
||||
borderSide:
|
||||
BorderSide(color: AppColors.noir), // Couleur rouge quand focus
|
||||
),
|
||||
// Personnalisation de l'InputDecorationTheme pour les text fields
|
||||
inputDecorationTheme: InputDecorationTheme(
|
||||
focusedBorder: OutlineInputBorder(
|
||||
// Bordure lorsqu'il est focus
|
||||
borderSide: BorderSide(
|
||||
color: AppColors.noir), // Couleur rouge quand focus
|
||||
),
|
||||
enabledBorder: OutlineInputBorder(
|
||||
// Bordure par défaut (non focus)
|
||||
borderSide:
|
||||
BorderSide(color: AppColors.gris), // Couleur grise par défaut
|
||||
),
|
||||
labelStyle: TextStyle(color: AppColors.noir), // Couleur du label
|
||||
hintStyle: TextStyle(color: AppColors.gris), // Couleur du hint text
|
||||
// Tu peux personnaliser d'autres propriétés ici :
|
||||
// fillColor, filled, iconColor, prefixStyle, suffixStyle, etc.
|
||||
enabledBorder: OutlineInputBorder(
|
||||
// Bordure par défaut (non focus)
|
||||
borderSide:
|
||||
BorderSide(color: AppColors.gris), // Couleur grise par défaut
|
||||
),
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
foregroundColor:
|
||||
AppColors.blanc, // Couleur du texte du bouton (ici blanc)
|
||||
backgroundColor: AppColors
|
||||
.noir, // Couleur de fond du bouton (si tu veux aussi changer le fond)
|
||||
// Autres styles possibles pour les boutons :
|
||||
// textStyle, padding, shape, elevation, etc.
|
||||
),
|
||||
labelStyle: TextStyle(color: AppColors.noir), // Couleur du label
|
||||
hintStyle: TextStyle(color: AppColors.gris), // Couleur du hint text
|
||||
// Tu peux personnaliser d'autres propriétés ici :
|
||||
// fillColor, filled, iconColor, prefixStyle, suffixStyle, etc.
|
||||
),
|
||||
elevatedButtonTheme: ElevatedButtonThemeData(
|
||||
style: ElevatedButton.styleFrom(
|
||||
foregroundColor:
|
||||
AppColors.blanc, // Couleur du texte du bouton (ici blanc)
|
||||
backgroundColor: AppColors
|
||||
.noir, // Couleur de fond du bouton (si tu veux aussi changer le fond)
|
||||
// Autres styles possibles pour les boutons :
|
||||
// textStyle, padding, shape, elevation, etc.
|
||||
),
|
||||
),
|
||||
routes: {
|
||||
'/login': (context) => const LoginPage(),
|
||||
'/calendar': (context) => const CalendarPage(),
|
||||
'/my_account': (context) => const MyAccountPage(),
|
||||
'/user_management': (context) => const UserManagementPage(),
|
||||
},
|
||||
// Conditionally set home based on authentication state
|
||||
home: LoginPage());
|
||||
),
|
||||
routes: {
|
||||
//Pages accessibles à tous
|
||||
'/login': (context) => const LoginPage(),
|
||||
|
||||
//Pages réservées aux UTILISATEURS CONNECTÉS
|
||||
'/calendar': (context) => const AuthGuard(child: CalendarPage()),
|
||||
'/my_account': (context) => const AuthGuard(child: MyAccountPage()),
|
||||
|
||||
//Pages réservées aux ADMIN
|
||||
'/user_management': (context) =>
|
||||
const AuthGuard(child: UserManagementPage(), requiredRole: "ADMIN"),
|
||||
},
|
||||
initialRoute: '/login',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
41
em2rp/lib/utils/auth_guard_widget.dart
Normal file
41
em2rp/lib/utils/auth_guard_widget.dart
Normal file
@ -0,0 +1,41 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:em2rp/providers/user_provider.dart';
|
||||
import 'package:em2rp/views/login_page.dart';
|
||||
|
||||
class AuthGuard extends StatelessWidget {
|
||||
final Widget child;
|
||||
final String?
|
||||
requiredRole; // Si non null, la page est réservée à ce rôle (ex: "ADMIN")
|
||||
|
||||
const AuthGuard({
|
||||
Key? key,
|
||||
required this.child,
|
||||
this.requiredRole,
|
||||
}) : super(key: key);
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
final userProvider = Provider.of<UserProvider>(context);
|
||||
|
||||
// Si l'utilisateur n'est pas connecté (aucun uid ou email)
|
||||
if (userProvider.uid == null || userProvider.email == null) {
|
||||
// Retourne la page de connexion.
|
||||
// Vous pouvez aussi déclencher une redirection automatique si nécessaire.
|
||||
return const LoginPage();
|
||||
}
|
||||
|
||||
// Si la page requiert un rôle spécifique et que l'utilisateur ne le possède pas
|
||||
if (requiredRole != null && userProvider.role != requiredRole) {
|
||||
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;
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user