From c16392900c5cf0b5913f0ef53d8b38dc98cc8a36 Mon Sep 17 00:00:00 2001 From: Manus Date: Thu, 29 Jan 2026 11:35:35 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Ajout=20du=20r=C3=B4le=20super=5F?= =?UTF-8?q?formateur=20avec=20acc=C3=A8s=20=C3=A0=20toutes=20les=20formati?= =?UTF-8?q?ons=20et=20s=C3=A9quences.=20Migration=20SQL=20appliqu=C3=A9e?= =?UTF-8?q?=20en=20local=20et=20sur=20le=20VPS=20de=20production.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .manus/db/db-query-1769704175404.json | 9 + client/src/components/DashboardLayout.tsx | 8 + client/src/pages/AdminUsers.tsx | 15 +- client/src/pages/Home.tsx | 4 +- drizzle/meta/0009_snapshot.json | 2269 +++++++++++++++++++++ drizzle/meta/_journal.json | 7 + drizzle/schema.ts | 2 +- server/routers.ts | 10 +- todo.md | 21 + 9 files changed, 2331 insertions(+), 14 deletions(-) create mode 100644 .manus/db/db-query-1769704175404.json create mode 100644 drizzle/meta/0009_snapshot.json diff --git a/.manus/db/db-query-1769704175404.json b/.manus/db/db-query-1769704175404.json new file mode 100644 index 0000000..d72fa65 --- /dev/null +++ b/.manus/db/db-query-1769704175404.json @@ -0,0 +1,9 @@ +{ + "query": "ALTER TABLE `users` MODIFY COLUMN `role` enum('user','admin','formateur','super_formateur') NOT NULL DEFAULT 'user';", + "command": "mysql --batch --raw --column-names --default-character-set=utf8mb4 --host gateway02.us-east-1.prod.aws.tidbcloud.com --port 4000 --user 4CrrYuB5tme73Qo.root --database 7PAT67UmWoxv8vwp8Bbcv6 --execute ALTER TABLE `users` MODIFY COLUMN `role` enum('user','admin','formateur','super_formateur') NOT NULL DEFAULT 'user';", + "rows": [], + "messages": [], + "stdout": "", + "stderr": "", + "execution_time_ms": 234 +} \ No newline at end of file diff --git a/client/src/components/DashboardLayout.tsx b/client/src/components/DashboardLayout.tsx index 8e4238a..bedfe2a 100644 --- a/client/src/components/DashboardLayout.tsx +++ b/client/src/components/DashboardLayout.tsx @@ -148,6 +148,10 @@ export default function DashboardLayout({ if (user && user.role === 'formateur' && location === '/admin') { setLocation('/formateur'); } + // Les super formateurs vont sur /admin comme les admins + if (user && user.role === 'super_formateur' && location === '/formateur') { + setLocation('/admin'); + } }, [user, location, setLocation]); if (loading) { @@ -224,6 +228,10 @@ function DashboardLayoutContent({ if (user?.role === 'formateur') { return section.title !== 'Configuration' && section.title !== 'Traçabilité' && section.title !== 'Analyses' && section.title !== 'Gestion technique'; } + // Les super formateurs ne voient pas Gestion technique + if (user?.role === 'super_formateur') { + return section.title !== 'Gestion technique'; + } return true; }).map(section => { // Modifier le chemin du tableau de bord pour les formateurs diff --git a/client/src/pages/AdminUsers.tsx b/client/src/pages/AdminUsers.tsx index 3e7c214..d767f2b 100644 --- a/client/src/pages/AdminUsers.tsx +++ b/client/src/pages/AdminUsers.tsx @@ -46,7 +46,7 @@ export default function AdminUsers() { email: "", username: "", password: "", - role: "user" as "user" | "admin" | "formateur", + role: "user" as "user" | "admin" | "formateur" | "super_formateur", formateurId: undefined as number | undefined, }); const [editForm, setEditForm] = useState({ @@ -54,7 +54,7 @@ export default function AdminUsers() { email: "", username: "", password: "", - role: "user" as "user" | "admin" | "formateur", + role: "user" as "user" | "admin" | "formateur" | "super_formateur", formateurId: undefined as number | undefined, }); @@ -277,6 +277,7 @@ export default function AdminUsers() { Administrateur Utilisateur Formateur + Super Formateur @@ -374,8 +375,8 @@ export default function AdminUsers() { {user.email || "N/A"} {user.username || "N/A"} - - {user.role === "admin" ? "Administrateur" : user.role === "formateur" ? "Formateur" : "Utilisateur"} + + {user.role === "admin" ? "Administrateur" : user.role === "formateur" ? "Formateur" : user.role === "super_formateur" ? "Super Formateur" : "Utilisateur"} @@ -512,11 +513,12 @@ export default function AdminUsers() { Utilisateur Administrateur Formateur + Super Formateur - {createForm.role === "formateur" && ( + {(createForm.role === "formateur" || createForm.role === "super_formateur") && (
- {editForm.role === "formateur" && ( + {(editForm.role === "formateur" || editForm.role === "super_formateur") && (