diff --git a/attached_assets/image_1752103258756.png b/attached_assets/image_1752103258756.png new file mode 100644 index 0000000..29cefc6 Binary files /dev/null and b/attached_assets/image_1752103258756.png differ diff --git a/client/src/components/Administration.tsx b/client/src/components/Administration.tsx index 7d6f2c5..8a95a7b 100644 --- a/client/src/components/Administration.tsx +++ b/client/src/components/Administration.tsx @@ -136,9 +136,12 @@ export default function Administration() { toast({ title: "Utilisateur modifié avec succès" }); }, onError: (error) => { - const errorMessage = error.message.includes("Vous ne pouvez pas changer votre propre rôle") - ? "Vous ne pouvez pas changer votre propre rôle d'administrateur" - : "Impossible de modifier l'utilisateur"; + let errorMessage = "Impossible de modifier l'utilisateur"; + if (error.message.includes("Vous ne pouvez pas changer votre propre rôle")) { + errorMessage = "Vous ne pouvez pas changer votre propre rôle d'administrateur"; + } else if (error.message.includes("Impossible de modifier le rôle du dernier administrateur")) { + errorMessage = "Impossible de modifier le rôle du dernier administrateur"; + } toast({ title: "Erreur", description: errorMessage, variant: "destructive" }); }, }); diff --git a/server/routes.ts b/server/routes.ts index 77e75e7..7c4d3eb 100644 --- a/server/routes.ts +++ b/server/routes.ts @@ -294,24 +294,27 @@ export async function registerRoutes(app: Express): Promise { const currentUser = await storage.getUser(req.session.userId!); const userData = insertUserSchema.partial().parse(req.body); - // Protection : empêcher un admin de changer son propre rôle par accident - if (userId === currentUser?.id && userData.role && userData.role !== 'administrator') { - return res.status(400).json({ - error: "Vous ne pouvez pas changer votre propre rôle d'administrateur" - }); - } - - // Protection : ne pas permettre de changer le rôle du dernier administrateur - if (userData.role && userData.role !== 'administrator') { - const users = await storage.getAllUsers(); - const adminUsers = users.filter(u => u.role === 'administrator'); - const userToUpdate = users.find(u => u.id === userId); - - if (userToUpdate?.role === 'administrator' && adminUsers.length <= 1) { + // Protection spécifique pour le rôle seulement + if (userData.role) { + // Protection : empêcher un admin de changer son propre rôle par accident + if (userId === currentUser?.id && userData.role !== 'administrator') { return res.status(400).json({ - error: "Impossible de modifier le rôle du dernier administrateur" + error: "Vous ne pouvez pas changer votre propre rôle d'administrateur" }); } + + // Protection : ne pas permettre de changer le rôle du dernier administrateur + if (userData.role !== 'administrator') { + const users = await storage.getAllUsers(); + const adminUsers = users.filter(u => u.role === 'administrator'); + const userToUpdate = users.find(u => u.id === userId); + + if (userToUpdate?.role === 'administrator' && adminUsers.length <= 1) { + return res.status(400).json({ + error: "Impossible de modifier le rôle du dernier administrateur" + }); + } + } } const user = await storage.updateUser(userId, userData);