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:
@@ -371,9 +371,10 @@ export default function AdminUsers() {
|
|||||||
variant="ghost"
|
variant="ghost"
|
||||||
size="sm"
|
size="sm"
|
||||||
onClick={() => handleDelete(user)}
|
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>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</TableCell>
|
</TableCell>
|
||||||
@@ -483,7 +484,9 @@ export default function AdminUsers() {
|
|||||||
<DialogHeader>
|
<DialogHeader>
|
||||||
<DialogTitle>Modifier l'utilisateur</DialogTitle>
|
<DialogTitle>Modifier l'utilisateur</DialogTitle>
|
||||||
<DialogDescription>
|
<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>
|
</DialogDescription>
|
||||||
</DialogHeader>
|
</DialogHeader>
|
||||||
|
|
||||||
@@ -495,6 +498,8 @@ export default function AdminUsers() {
|
|||||||
value={editForm.name}
|
value={editForm.name}
|
||||||
onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}
|
onChange={(e) => setEditForm({ ...editForm, name: e.target.value })}
|
||||||
placeholder="Nom de l'utilisateur"
|
placeholder="Nom de l'utilisateur"
|
||||||
|
disabled={selectedUser?.username === "adminServFormation"}
|
||||||
|
className={selectedUser?.username === "adminServFormation" ? "bg-gray-100 cursor-not-allowed" : ""}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -506,6 +511,8 @@ export default function AdminUsers() {
|
|||||||
value={editForm.email}
|
value={editForm.email}
|
||||||
onChange={(e) => setEditForm({ ...editForm, email: e.target.value })}
|
onChange={(e) => setEditForm({ ...editForm, email: e.target.value })}
|
||||||
placeholder="email@exemple.com"
|
placeholder="email@exemple.com"
|
||||||
|
disabled={selectedUser?.username === "adminServFormation"}
|
||||||
|
className={selectedUser?.username === "adminServFormation" ? "bg-gray-100 cursor-not-allowed" : ""}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -516,8 +523,12 @@ export default function AdminUsers() {
|
|||||||
value={editForm.username}
|
value={editForm.username}
|
||||||
onChange={(e) => setEditForm({ ...editForm, username: e.target.value })}
|
onChange={(e) => setEditForm({ ...editForm, username: e.target.value })}
|
||||||
placeholder="Identifiant unique pour la connexion"
|
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>
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
|
|||||||
7
todo.md
7
todo.md
@@ -392,3 +392,10 @@
|
|||||||
- [ ] Afficher l'identifiant de connexion dans la liste des utilisateurs
|
- [ ] Afficher l'identifiant de connexion dans la liste des utilisateurs
|
||||||
- [ ] Permettre la modification de l'identifiant et du mot de passe dans la fenêtre d'édition
|
- [ ] Permettre la modification de l'identifiant et du mot de passe dans la fenêtre d'édition
|
||||||
- [x] Tester les modifications
|
- [x] Tester les modifications
|
||||||
|
|
||||||
|
## Utilisateur administrateur spécial
|
||||||
|
|
||||||
|
- [x] Créer l'utilisateur "adminServFormation" avec mot de passe "Itinova69!" dans la base de données
|
||||||
|
- [x] Modifier l'interface pour désactiver le bouton de suppression pour cet utilisateur
|
||||||
|
- [x] Modifier le formulaire d'édition pour rendre les champs nom, email et identifiant en lecture seule pour cet utilisateur
|
||||||
|
- [x] Tester les modifications
|
||||||
|
|||||||
Reference in New Issue
Block a user