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/calendar_page.dart';
|
||||||
import 'package:em2rp/views/login_page.dart';
|
import 'package:em2rp/views/login_page.dart';
|
||||||
import 'package:firebase_auth/firebase_auth.dart';
|
import 'package:firebase_auth/firebase_auth.dart';
|
||||||
@ -15,6 +16,8 @@ void main() async {
|
|||||||
await Firebase.initializeApp(
|
await Firebase.initializeApp(
|
||||||
options: DefaultFirebaseOptions.currentPlatform,
|
options: DefaultFirebaseOptions.currentPlatform,
|
||||||
);
|
);
|
||||||
|
await FirebaseAuth.instance.setPersistence(Persistence.LOCAL);
|
||||||
|
|
||||||
runApp(
|
runApp(
|
||||||
ChangeNotifierProvider(
|
ChangeNotifierProvider(
|
||||||
// Wrap MyApp with ChangeNotifierProvider
|
// Wrap MyApp with ChangeNotifierProvider
|
||||||
@ -44,8 +47,8 @@ class MyApp extends StatelessWidget {
|
|||||||
inputDecorationTheme: InputDecorationTheme(
|
inputDecorationTheme: InputDecorationTheme(
|
||||||
focusedBorder: OutlineInputBorder(
|
focusedBorder: OutlineInputBorder(
|
||||||
// Bordure lorsqu'il est focus
|
// Bordure lorsqu'il est focus
|
||||||
borderSide: BorderSide(
|
borderSide:
|
||||||
color: AppColors.noir), // Couleur rouge quand focus
|
BorderSide(color: AppColors.noir), // Couleur rouge quand focus
|
||||||
),
|
),
|
||||||
enabledBorder: OutlineInputBorder(
|
enabledBorder: OutlineInputBorder(
|
||||||
// Bordure par défaut (non focus)
|
// Bordure par défaut (non focus)
|
||||||
@ -69,12 +72,18 @@ class MyApp extends StatelessWidget {
|
|||||||
),
|
),
|
||||||
),
|
),
|
||||||
routes: {
|
routes: {
|
||||||
|
//Pages accessibles à tous
|
||||||
'/login': (context) => const LoginPage(),
|
'/login': (context) => const LoginPage(),
|
||||||
'/calendar': (context) => const CalendarPage(),
|
|
||||||
'/my_account': (context) => const MyAccountPage(),
|
//Pages réservées aux UTILISATEURS CONNECTÉS
|
||||||
'/user_management': (context) => const UserManagementPage(),
|
'/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"),
|
||||||
},
|
},
|
||||||
// Conditionally set home based on authentication state
|
initialRoute: '/login',
|
||||||
home: LoginPage());
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
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