feat: Initial middleware

This commit is contained in:
2025-09-18 13:34:15 -04:00
parent 834e640b31
commit 69f61f7ae2
6 changed files with 47 additions and 0 deletions

View File

@@ -0,0 +1,19 @@
export default defineNuxtRouteMiddleware((to) => {
const { loggedIn, session } = useUserSession();
const hasRole = (role: string) => session.value?.user?.roles?.includes(role) || false;
if (!loggedIn.value) {
return navigateTo(`/connexion?redirect=${encodeURIComponent(to.fullPath)}`);
}
if (!to.meta.role) {
throw createError({ statusCode: 500, statusMessage: "Erreur serveur", message: "Le paramètre 'role' est requis (hasRole)." });
}
if (!hasRole(to.meta.role)) {
throw createError({ statusCode: 403, statusMessage: "Accès refusé", message: `Le rôle '${to.meta.role}' est requis.` });
}
});
declare module "#app" {
interface PageMeta {
role?: string;
}
}

View File

@@ -0,0 +1,13 @@
export default defineNuxtRouteMiddleware((to) => {
const { loggedIn, session } = useUserSession();
if (!loggedIn.value) {
return navigateTo(`/connexion?redirect=${encodeURIComponent(to.fullPath)}`);
}
const isAdmin = session.value?.user?.roles?.includes("administrator") || false;
if (!isAdmin) {
throw createError({
statusCode: 403,
statusMessage: "Accès refusé - Privilèges administrateur requis",
});
}
});

View File

@@ -0,0 +1,6 @@
export default defineNuxtRouteMiddleware((to) => {
const { loggedIn } = useUserSession();
if (!loggedIn.value) {
return navigateTo(`/connexion?redirect=${encodeURIComponent(to.fullPath)}`);
}
});

View File

@@ -0,0 +1,6 @@
export default defineNuxtRouteMiddleware((to) => {
const { loggedIn } = useUserSession();
if (loggedIn.value) {
return navigateTo(`/connexion?redirect=${encodeURIComponent(to.fullPath)}`);
}
});

View File

@@ -1,6 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import type { BreadcrumbItem } from "@nuxt/ui"; import type { BreadcrumbItem } from "@nuxt/ui";
definePageMeta({ middleware: "is-logged-out" });
useSeoMeta({ title: "Devenir membre" }); useSeoMeta({ title: "Devenir membre" });
const breadcrumbs = [] as BreadcrumbItem[]; const breadcrumbs = [] as BreadcrumbItem[];
</script> </script>

View File

@@ -1,6 +1,8 @@
<script setup lang="ts"> <script setup lang="ts">
import type { BreadcrumbItem } from "@nuxt/ui"; import type { BreadcrumbItem } from "@nuxt/ui";
definePageMeta({ middleware: "is-logged-in" });
useSeoMeta({ title: "Espace membre" }); useSeoMeta({ title: "Espace membre" });
const breadcrumbs = [] as BreadcrumbItem[]; const breadcrumbs = [] as BreadcrumbItem[];
</script> </script>