mirror of
https://github.com/R0m1k3/Regisflow.git
synced 2026-10-22 22:58:16 +02:00
Prevent admin users from accidentally demoting themselves or the last admin
Implements server-side validation and updates client error messaging to prevent accidental role changes in `server/routes.ts` and `client/src/components/Administration.tsx`. Replit-Commit-Author: Agent Replit-Commit-Session-Id: 91318273-c764-4fd4-be04-bdc12c38af32 Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/0715008c-7244-40f4-befc-26c014852236/9d9e1107-c416-4124-a939-a91c612c56a1.jpg
This commit is contained in:
1 parent
f1b0cb07b7
commit
bedb7bd4cc
3 files changed
+24
-18
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 5.6 KiB |
@@ -136,9 +136,12 @@ export default function Administration() {
|
|||||||
toast({ title: "Utilisateur modifié avec succès" });
|
toast({ title: "Utilisateur modifié avec succès" });
|
||||||
},
|
},
|
||||||
onError: (error) => {
|
onError: (error) => {
|
||||||
const errorMessage = error.message.includes("Vous ne pouvez pas changer votre propre rôle")
|
let errorMessage = "Impossible de modifier l'utilisateur";
|
||||||
? "Vous ne pouvez pas changer votre propre rôle d'administrateur"
|
if (error.message.includes("Vous ne pouvez pas changer votre propre rôle")) {
|
||||||
: "Impossible de modifier l'utilisateur";
|
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" });
|
toast({ title: "Erreur", description: errorMessage, variant: "destructive" });
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
+18
-15
@@ -294,24 +294,27 @@ export async function registerRoutes(app: Express): Promise<Server> {
|
|||||||
const currentUser = await storage.getUser(req.session.userId!);
|
const currentUser = await storage.getUser(req.session.userId!);
|
||||||
const userData = insertUserSchema.partial().parse(req.body);
|
const userData = insertUserSchema.partial().parse(req.body);
|
||||||
|
|
||||||
// Protection : empêcher un admin de changer son propre rôle par accident
|
// Protection spécifique pour le rôle seulement
|
||||||
if (userId === currentUser?.id && userData.role && userData.role !== 'administrator') {
|
if (userData.role) {
|
||||||
return res.status(400).json({
|
// Protection : empêcher un admin de changer son propre rôle par accident
|
||||||
error: "Vous ne pouvez pas changer votre propre rôle d'administrateur"
|
if (userId === currentUser?.id && userData.role !== 'administrator') {
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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) {
|
|
||||||
return res.status(400).json({
|
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);
|
const user = await storage.updateUser(userId, userData);
|
||||||
|
|||||||
Reference in new issue
Block a user