Checkpoint: Création d'un utilisateur administrateur spécial non supprimable

Modifications apportées :
- Création de l'utilisateur "Administrateur" avec identifiant "adminServFormation" et mot de passe "Itinova69!" (hashé avec bcrypt)
- Modification de l'interface pour désactiver le bouton de suppression pour cet utilisateur (grisé avec tooltip explicatif)
- Modification du formulaire d'édition pour rendre les champs nom, email et identifiant en lecture seule (grisés et désactivés)
- Ajout d'un message explicatif dans le formulaire : "Seul le mot de passe peut être modifié pour cet utilisateur"
- Seuls les champs "Nouveau mot de passe" et "Rôle" restent modifiables pour cet utilisateur
- L'utilisateur est identifié par son username "adminServFormation" pour appliquer les restrictions
- Cet utilisateur ne peut pas être supprimé et ses informations de base ne peuvent pas être modifiées, garantissant un accès administrateur permanent au système
This commit is contained in:
Manus Sandbox
2025-11-21 10:18:49 -05:00
parent 8a61f9b823
commit 422f5634f9
2 changed files with 22 additions and 4 deletions

View File

@@ -371,9 +371,10 @@ export default function AdminUsers() {
variant="ghost"
size="sm"
onClick={() => handleDelete(user)}
title="Supprimer"
title={user.username === "adminServFormation" ? "Cet utilisateur ne peut pas être supprimé" : "Supprimer"}
disabled={user.username === "adminServFormation"}
>
<Trash2 className="h-4 w-4 text-red-500" />
<Trash2 className={user.username === "adminServFormation" ? "h-4 w-4 text-gray-300" : "h-4 w-4 text-red-500"} />
</Button>
</div>
</TableCell>
@@ -483,7 +484,9 @@ export default function AdminUsers() {
<DialogHeader>
<DialogTitle>Modifier l'utilisateur</DialogTitle>
<DialogDescription>
Modifiez les informations de l'utilisateur
{selectedUser?.username === "adminServFormation"
? "Seul le mot de passe peut être modifié pour cet utilisateur"
: "Modifiez les informations de l'utilisateur"}
</DialogDescription>
</DialogHeader>
@@ -495,6 +498,8 @@ export default function AdminUsers() {
value={editForm.name}
onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}
placeholder="Nom de l'utilisateur"
disabled={selectedUser?.username === "adminServFormation"}
className={selectedUser?.username === "adminServFormation" ? "bg-gray-100 cursor-not-allowed" : ""}
/>
</div>
@@ -506,6 +511,8 @@ export default function AdminUsers() {
value={editForm.email}
onChange={(e) => setEditForm({ ...editForm, email: e.target.value })}
placeholder="email@exemple.com"
disabled={selectedUser?.username === "adminServFormation"}
className={selectedUser?.username === "adminServFormation" ? "bg-gray-100 cursor-not-allowed" : ""}
/>
</div>
@@ -516,8 +523,12 @@ export default function AdminUsers() {
value={editForm.username}
onChange={(e) => setEditForm({ ...editForm, username: e.target.value })}
placeholder="Identifiant unique pour la connexion"
disabled={selectedUser?.username === "adminServFormation"}
className={selectedUser?.username === "adminServFormation" ? "bg-gray-100 cursor-not-allowed" : ""}
/>
<p className="text-xs text-muted-foreground mt-1">Laissez vide pour ne pas modifier</p>
{selectedUser?.username !== "adminServFormation" && (
<p className="text-xs text-muted-foreground mt-1">Laissez vide pour ne pas modifier</p>
)}
</div>
<div>