generated from pascalmartineau/wp-skeleton
feat: Initial middleware
This commit is contained in:
19
wp-content/themes/ccat/app/middleware/hasRole.ts
Normal file
19
wp-content/themes/ccat/app/middleware/hasRole.ts
Normal 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
13
wp-content/themes/ccat/app/middleware/isAdmin.ts
Normal file
13
wp-content/themes/ccat/app/middleware/isAdmin.ts
Normal 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",
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
6
wp-content/themes/ccat/app/middleware/isLoggedIn.ts
Normal file
6
wp-content/themes/ccat/app/middleware/isLoggedIn.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export default defineNuxtRouteMiddleware((to) => {
|
||||||
|
const { loggedIn } = useUserSession();
|
||||||
|
if (!loggedIn.value) {
|
||||||
|
return navigateTo(`/connexion?redirect=${encodeURIComponent(to.fullPath)}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
6
wp-content/themes/ccat/app/middleware/isLoggedOut.ts
Normal file
6
wp-content/themes/ccat/app/middleware/isLoggedOut.ts
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
export default defineNuxtRouteMiddleware((to) => {
|
||||||
|
const { loggedIn } = useUserSession();
|
||||||
|
if (loggedIn.value) {
|
||||||
|
return navigateTo(`/connexion?redirect=${encodeURIComponent(to.fullPath)}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
@@ -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>
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user