From cd474d50897086342fdfa98ef6b5f26a0dbbc0ca Mon Sep 17 00:00:00 2001 From: Matthieu Date: Tue, 26 May 2026 10:49:27 +0200 Subject: [PATCH] =?UTF-8?q?feat(absences)=20:=20r=C3=A9serve=20=C2=AB=20Me?= =?UTF-8?q?s=20absences=20=C2=BB=20aux=20employ=C3=A9s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Un utilisateur non coché « Employé » (isEmployee = false) ne voit plus l'entrée « Mes absences » dans le menu et ne peut plus accéder à la page /absences (nouveau middleware employee qui redirige vers l'accueil). L'entête de section « Absences » est masquée si l'utilisateur n'est ni employé ni admin. --- frontend/layouts/default.vue | 13 +++++++++---- frontend/middleware/employee.ts | 9 +++++++++ frontend/pages/absences.vue | 2 ++ 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 frontend/middleware/employee.ts diff --git a/frontend/layouts/default.vue b/frontend/layouts/default.vue index aa08550..491e5da 100644 --- a/frontend/layouts/default.vue +++ b/frontend/layouts/default.vue @@ -119,11 +119,14 @@ -

- Absences -

-
+ (auth.user?.roles ?? []).includes('ROLE_ADMIN')) +const isEmployee = computed(() => Boolean(auth.user?.isEmployee)) +const isAbsenceSectionVisible = computed(() => isEmployee.value || isAdmin.value) const isMailVisible = computed(() => { const roles: string[] = auth.user?.roles ?? [] diff --git a/frontend/middleware/employee.ts b/frontend/middleware/employee.ts new file mode 100644 index 0000000..0a5e5ec --- /dev/null +++ b/frontend/middleware/employee.ts @@ -0,0 +1,9 @@ +export default defineNuxtRouteMiddleware(() => { + const auth = useAuthStore() + + // "Mes absences" is reserved for users flagged as employees (subject to the + // absence management). Non-employees are redirected to the home page. + if (!auth.isAuthenticated || !auth.user?.isEmployee) { + return navigateTo('/') + } +}) diff --git a/frontend/pages/absences.vue b/frontend/pages/absences.vue index 8604922..7b68792 100644 --- a/frontend/pages/absences.vue +++ b/frontend/pages/absences.vue @@ -75,6 +75,8 @@ import { useAbsenceHelpers } from '~/composables/useAbsenceHelpers' type Row = AbsenceRequest & { typeLabelText: string; periodText: string; daysText: string; createdAtText: string } +definePageMeta({ middleware: ['employee'] }) + const { t } = useI18n() const service = useAbsenceService() const { statusLabel, statusVariant, statusIcon, formatRange, formatDays, formatDate } = useAbsenceHelpers()