Refacto : on ne verifie plus le role admin mais les permissions du role

This commit is contained in:
2025-05-25 21:56:07 +02:00
parent 851b891a8a
commit 82d77e2b8d
10 changed files with 228 additions and 289 deletions

View File

@ -3,6 +3,8 @@ import 'package:provider/provider.dart';
import 'package:em2rp/models/user_model.dart';
import 'package:em2rp/providers/users_provider.dart';
import 'package:em2rp/utils/colors.dart';
import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:em2rp/models/role_model.dart';
class EditUserDialog extends StatefulWidget {
final UserModel user;
@ -17,9 +19,9 @@ class _EditUserDialogState extends State<EditUserDialog> {
late final TextEditingController lastNameController;
late final TextEditingController emailController;
late final TextEditingController phoneController;
String selectedRole = '';
static const List<String> roles = ['ADMIN', 'CREW'];
String? selectedRoleId;
List<RoleModel> availableRoles = [];
bool isLoadingRoles = true;
@override
void initState() {
@ -28,7 +30,20 @@ class _EditUserDialogState extends State<EditUserDialog> {
lastNameController = TextEditingController(text: widget.user.lastName);
emailController = TextEditingController(text: widget.user.email);
phoneController = TextEditingController(text: widget.user.phoneNumber);
selectedRole = widget.user.role.isEmpty ? roles.first : widget.user.role;
_loadRoles();
}
Future<void> _loadRoles() async {
final snapshot = await FirebaseFirestore.instance.collection('roles').get();
setState(() {
availableRoles = snapshot.docs
.map((doc) => RoleModel.fromMap(doc.data(), doc.id))
.toList();
selectedRoleId = widget.user.role.isEmpty
? (availableRoles.isNotEmpty ? availableRoles.first.id : null)
: widget.user.role;
isLoadingRoles = false;
});
}
@override
@ -111,24 +126,26 @@ class _EditUserDialogState extends State<EditUserDialog> {
keyboardType: TextInputType.phone,
),
const SizedBox(height: 16),
DropdownButtonFormField<String>(
value: selectedRole,
decoration: _buildInputDecoration(
'Rôle', Icons.admin_panel_settings_outlined),
items: roles.map((String role) {
return DropdownMenuItem<String>(
value: role,
child: Text(role),
);
}).toList(),
onChanged: (String? newValue) {
if (newValue != null) {
setState(() {
selectedRole = newValue;
});
}
},
),
isLoadingRoles
? const CircularProgressIndicator()
: DropdownButtonFormField<String>(
value: selectedRoleId,
decoration: _buildInputDecoration(
'Rôle', Icons.admin_panel_settings_outlined),
items: availableRoles.map((role) {
return DropdownMenuItem<String>(
value: role.id,
child: Text(role.name),
);
}).toList(),
onChanged: (String? newValue) {
if (newValue != null) {
setState(() {
selectedRoleId = newValue;
});
}
},
),
],
),
),
@ -149,16 +166,17 @@ class _EditUserDialogState extends State<EditUserDialog> {
),
const SizedBox(width: 8),
ElevatedButton(
onPressed: () {
onPressed: () async {
if (selectedRoleId == null) return;
final updatedUser = widget.user.copyWith(
firstName: firstNameController.text,
lastName: lastNameController.text,
email: emailController.text,
phoneNumber: phoneController.text,
role: selectedRole,
role: selectedRoleId,
);
Provider.of<UsersProvider>(context, listen: false)
.updateUser(updatedUser);
await Provider.of<UsersProvider>(context, listen: false)
.updateUser(updatedUser, roleId: selectedRoleId);
Navigator.pop(context);
},
style: ElevatedButton.styleFrom(