From fc6168e5a447aee20c30e4df09aa0614c11bba95 Mon Sep 17 00:00:00 2001 From: Pascal Martineau Date: Wed, 11 Feb 2026 09:24:19 -0500 Subject: [PATCH] feat: auth middleware --- .../themes/moonshine/app/middleware/hasRole.ts | 18 ++++++++++++++++++ .../themes/moonshine/app/middleware/isAdmin.ts | 12 ++++++++++++ .../moonshine/app/middleware/isLoggedIn.ts | 6 ++++++ .../moonshine/app/middleware/isLoggedOut.ts | 6 ++++++ 4 files changed, 42 insertions(+) create mode 100644 wp-content/themes/moonshine/app/middleware/hasRole.ts create mode 100644 wp-content/themes/moonshine/app/middleware/isAdmin.ts create mode 100644 wp-content/themes/moonshine/app/middleware/isLoggedIn.ts create mode 100644 wp-content/themes/moonshine/app/middleware/isLoggedOut.ts diff --git a/wp-content/themes/moonshine/app/middleware/hasRole.ts b/wp-content/themes/moonshine/app/middleware/hasRole.ts new file mode 100644 index 0000000..29a152b --- /dev/null +++ b/wp-content/themes/moonshine/app/middleware/hasRole.ts @@ -0,0 +1,18 @@ +export default defineNuxtRouteMiddleware((to) => { + const { hasRole, isLoggedIn } = useAuth(); + if (!isLoggedIn.value) { + return navigateTo({ path: "/connexion", query: { redirect: to.fullPath } }); + } + if (!hasRole(to.meta.hasRole || "")) { + return abortNavigation({ + statusCode: 403, + message: "Vous n'avez pas les permissions requises pour accéder à cette page.", + }); + } +}); + +declare module "#app" { + interface PageMeta { + hasRole?: string; + } +} diff --git a/wp-content/themes/moonshine/app/middleware/isAdmin.ts b/wp-content/themes/moonshine/app/middleware/isAdmin.ts new file mode 100644 index 0000000..75c9912 --- /dev/null +++ b/wp-content/themes/moonshine/app/middleware/isAdmin.ts @@ -0,0 +1,12 @@ +export default defineNuxtRouteMiddleware((to) => { + const { isAdmin, isLoggedIn } = useAuth(); + if (!isLoggedIn.value) { + return navigateTo({ path: "/connexion", query: { redirect: to.fullPath } }); + } + if (!isAdmin.value) { + return abortNavigation({ + statusCode: 403, + message: "Vous n'avez pas les permissions requises pour accéder à cette page.", + }); + } +}); diff --git a/wp-content/themes/moonshine/app/middleware/isLoggedIn.ts b/wp-content/themes/moonshine/app/middleware/isLoggedIn.ts new file mode 100644 index 0000000..2b7c1de --- /dev/null +++ b/wp-content/themes/moonshine/app/middleware/isLoggedIn.ts @@ -0,0 +1,6 @@ +export default defineNuxtRouteMiddleware((to) => { + const { isLoggedIn } = useAuth(); + if (!isLoggedIn.value) { + return navigateTo({ path: "/connexion", query: { redirect: to.fullPath } }); + } +}); diff --git a/wp-content/themes/moonshine/app/middleware/isLoggedOut.ts b/wp-content/themes/moonshine/app/middleware/isLoggedOut.ts new file mode 100644 index 0000000..f68e4d5 --- /dev/null +++ b/wp-content/themes/moonshine/app/middleware/isLoggedOut.ts @@ -0,0 +1,6 @@ +export default defineNuxtRouteMiddleware((to) => { + const { isLoggedIn } = useAuth(); + if (isLoggedIn.value) { + return navigateTo({ path: "/connexion", query: { redirect: to.fullPath } }); + } +});