Checkpoint: Autoriser les formateurs à accéder aux exports PDF/Excel et aux feuilles de présence : remplacement de adminProcedure par protectedProcedure pour les trois procédures exportExcel, exportPDF et exportFeuillePresence
This commit is contained in:
@@ -1024,7 +1024,7 @@ export const appRouter = router({
|
|||||||
return await generateEmailPreview(input);
|
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);
|
const sequence = await db.getSequenceById(input.sequenceId);
|
||||||
if (!sequence) throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' });
|
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);
|
const sequence = await db.getSequenceById(input.sequenceId);
|
||||||
if (!sequence) throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' });
|
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);
|
const sequence = await db.getSequenceById(input.sequenceId);
|
||||||
if (!sequence) throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' });
|
if (!sequence) throw new TRPCError({ code: 'NOT_FOUND', message: 'Séquence introuvable' });
|
||||||
|
|
||||||
|
|||||||
7
todo.md
7
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
|
- [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 (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
|
- [ ] 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
|
||||||
|
|||||||
Reference in New Issue
Block a user