From ef638d8c8c76565b4530ed014f23db641a6f046f Mon Sep 17 00:00:00 2001 From: ElPoyo Date: Fri, 17 Oct 2025 15:59:53 +0200 Subject: [PATCH] Mise en place du permission gate sur les pages de data managment --- em2rp/lib/views/data_management_page.dart | 35 ++++++++++++++++++-- em2rp/lib/views/widgets/nav/main_drawer.dart | 29 ++++++++-------- 2 files changed, 49 insertions(+), 15 deletions(-) diff --git a/em2rp/lib/views/data_management_page.dart b/em2rp/lib/views/data_management_page.dart index 7857cdc..2f4c6ef 100644 --- a/em2rp/lib/views/data_management_page.dart +++ b/em2rp/lib/views/data_management_page.dart @@ -4,6 +4,7 @@ import 'package:em2rp/views/widgets/data_management/event_types_management.dart' import 'package:em2rp/views/widgets/data_management/options_management.dart'; import 'package:em2rp/views/widgets/nav/main_drawer.dart'; import 'package:em2rp/views/widgets/nav/custom_app_bar.dart'; +import 'package:em2rp/utils/permission_gate.dart'; class DataManagementPage extends StatefulWidget { const DataManagementPage({super.key}); @@ -31,15 +32,44 @@ class _DataManagementPageState extends State { Widget build(BuildContext context) { final isMobile = MediaQuery.of(context).size.width < 800; - return Scaffold( + return PermissionGate( + requiredPermissions: const ['view_all_users'], + fallback: const Scaffold( + appBar: CustomAppBar( + title: 'Accès refusé', + ), + body: Center( + child: Text( + 'Vous n\'avez pas les permissions nécessaires pour accéder à cette page.', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 16), + ), + ), + ), + child: Scaffold( appBar: CustomAppBar(title: 'Gestion des données'), drawer: const MainDrawer(currentPage: '/data_management'), // Ajout du drawer body: isMobile ? _buildMobileLayout() : _buildDesktopLayout(), + ), ); } Widget _buildMobileLayout() { - return Column( + return PermissionGate( + requiredPermissions: const ['view_all_users'], + fallback: const Scaffold( + appBar: CustomAppBar( + title: 'Accès refusé', + ), + body: Center( + child: Text( + 'Vous n\'avez pas les permissions nécessaires pour accéder à cette page.', + textAlign: TextAlign.center, + style: TextStyle(fontSize: 16), + ), + ), + ), + child: Column( children: [ // Menu horizontal en mobile Container( @@ -86,6 +116,7 @@ class _DataManagementPageState extends State { child: _categories[_selectedIndex].widget, ), ], + ) ); } diff --git a/em2rp/lib/views/widgets/nav/main_drawer.dart b/em2rp/lib/views/widgets/nav/main_drawer.dart index 3e2917f..8475ae7 100644 --- a/em2rp/lib/views/widgets/nav/main_drawer.dart +++ b/em2rp/lib/views/widgets/nav/main_drawer.dart @@ -134,19 +134,22 @@ class MainDrawer extends StatelessWidget { }, ), ), - ListTile( - leading: const Icon(Icons.data_usage), - title: const Text('Gestion des Données'), - selected: currentPage == '/data_management', - selectedColor: AppColors.rouge, - onTap: () { - Navigator.pop(context); - Navigator.pushReplacement( - context, - MaterialPageRoute( - builder: (context) => const DataManagementPage()), - ); - }, + PermissionGate( + requiredPermissions: const ['edit_data'], + child: ListTile( + leading: const Icon(Icons.data_usage), + title: const Text('Gestion des Données'), + selected: currentPage == '/data_management', + selectedColor: AppColors.rouge, + onTap: () { + Navigator.pop(context); + Navigator.pushReplacement( + context, + MaterialPageRoute( + builder: (context) => const DataManagementPage()), + ); + }, + ), ), ], ),