fix(#160): un gestionnaire ne peut plus supprimer un autre depuis la fiche.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-10 22:38:57 +02:00
co-authored by Cursor
parent 97afbbcf9a
commit 67336c64fe
@@ -8,6 +8,7 @@ import 'package:p_tits_pas/models/user.dart';
import 'package:p_tits_pas/services/auth_service.dart'; import 'package:p_tits_pas/services/auth_service.dart';
import 'package:p_tits_pas/services/relais_service.dart'; import 'package:p_tits_pas/services/relais_service.dart';
import 'package:p_tits_pas/services/user_service.dart'; import 'package:p_tits_pas/services/user_service.dart';
import 'package:p_tits_pas/utils/staff_deletion_rights.dart';
import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart'; import 'package:p_tits_pas/widgets/admin/common/suppression_confirm_dialog.dart';
class AdminUserFormDialog extends StatefulWidget { class AdminUserFormDialog extends StatefulWidget {
@@ -44,6 +45,7 @@ class _AdminUserFormDialogState extends State<AdminUserFormDialog> {
List<RelaisModel> _relais = []; List<RelaisModel> _relais = [];
String? _selectedRelaisId; String? _selectedRelaisId;
String? _currentUserId; String? _currentUserId;
String? _currentUserRole;
bool get _isEditMode => widget.initialUser != null; bool get _isEditMode => widget.initialUser != null;
bool get _isSuperAdminTarget => bool get _isSuperAdminTarget =>
(widget.initialUser?.role ?? '').toLowerCase() == 'super_admin'; (widget.initialUser?.role ?? '').toLowerCase() == 'super_admin';
@@ -51,7 +53,12 @@ class _AdminUserFormDialogState extends State<AdminUserFormDialog> {
_isEditMode && _isEditMode &&
_currentUserId != null && _currentUserId != null &&
widget.initialUser!.id == _currentUserId; widget.initialUser!.id == _currentUserId;
bool get _canDeleteTarget => !_isSuperAdminTarget && !_isSelfTarget; /// Gestionnaire : pas de delete staff. Admin+ seulement (#154 / #160).
bool get _canDeleteTarget {
if (!_isEditMode || widget.readOnly) return false;
if (_isSelfTarget || _isSuperAdminTarget) return false;
return canDeleteGestionnaire(_currentUserRole);
}
bool get _isLockedAdminIdentity => bool get _isLockedAdminIdentity =>
_isEditMode && widget.adminMode && _isSuperAdminTarget; _isEditMode && widget.adminMode && _isSuperAdminTarget;
String get _targetRoleKey { String get _targetRoleKey {
@@ -126,6 +133,7 @@ class _AdminUserFormDialogState extends State<AdminUserFormDialog> {
if (cached != null) { if (cached != null) {
setState(() { setState(() {
_currentUserId = cached.id; _currentUserId = cached.id;
_currentUserRole = cached.role;
}); });
return; return;
} }
@@ -133,6 +141,7 @@ class _AdminUserFormDialogState extends State<AdminUserFormDialog> {
if (!mounted || refreshed == null) return; if (!mounted || refreshed == null) return;
setState(() { setState(() {
_currentUserId = refreshed.id; _currentUserId = refreshed.id;
_currentUserRole = refreshed.role;
}); });
} }