From 60aeee71c7473bf5f6fed82a27613777ba18ba95 Mon Sep 17 00:00:00 2001 From: Manus Date: Sun, 25 Jan 2026 05:28:18 -0500 Subject: [PATCH] =?UTF-8?q?Checkpoint:=20Autoriser=20les=20formateurs=20?= =?UTF-8?q?=C3=A0=20acc=C3=A9der=20aux=20exports=20PDF/Excel=20et=20aux=20?= =?UTF-8?q?feuilles=20de=20pr=C3=A9sence=20:=20remplacement=20de=20adminPr?= =?UTF-8?q?ocedure=20par=20protectedProcedure=20pour=20les=20trois=20proc?= =?UTF-8?q?=C3=A9dures=20exportExcel,=20exportPDF=20et=20exportFeuillePres?= =?UTF-8?q?ence?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/routers.ts | 6 +++--- todo.md | 7 +++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/server/routers.ts b/server/routers.ts index 2919a22..a8d71f5 100644 --- a/server/routers.ts +++ b/server/routers.ts @@ -1024,7 +1024,7 @@ export const appRouter = router({ return await generateEmailPreview(input); }), - exportExcel: adminProcedure.input(z.object({ sequenceId: z.number() })).mutation(async ({ input }) => { + exportExcel: protectedProcedure.input(z.object({ sequenceId: z.number() })).mutation(async ({ input }) => { const sequence = await db.getSequenceById(input.sequenceId); if (!sequence) throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' }); @@ -1065,7 +1065,7 @@ export const appRouter = router({ }; }), - exportPDF: adminProcedure.input(z.object({ sequenceId: z.number() })).mutation(async ({ input }) => { + exportPDF: protectedProcedure.input(z.object({ sequenceId: z.number() })).mutation(async ({ input }) => { const sequence = await db.getSequenceById(input.sequenceId); if (!sequence) throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' }); @@ -1106,7 +1106,7 @@ export const appRouter = router({ }; }), - exportFeuillePresence: adminProcedure.input(z.object({ sequenceId: z.number() })).mutation(async ({ input }) => { + exportFeuillePresence: protectedProcedure.input(z.object({ sequenceId: z.number() })).mutation(async ({ input }) => { const sequence = await db.getSequenceById(input.sequenceId); if (!sequence) throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' }); diff --git a/todo.md b/todo.md index 00fe146..738db9f 100644 --- a/todo.md +++ b/todo.md @@ -1200,3 +1200,10 @@ - [x] Ajouter une validation frontend en temps réel dans les champs de date pour afficher un message d'erreur immédiat - [ ] Restreindre les droits des formateurs (pas de modification/suppression de formations et séquences) - [ ] Restreindre les droits des formateurs pour qu'ils ne puissent pas créer/modifier/supprimer des apprenants + +## Autoriser les formateurs à accéder aux exports et feuilles de présence + +- [x] Identifier les procédures backend concernées (exports PDF/Excel, feuille de présence) +- [x] Modifier les restrictions pour autoriser les formateurs +- [ ] Tester les modifications +- [ ] Déployer sur le VPS