import { hasPermissions } from "#shared/auth"; export default defineNuxtRouteMiddleware(async (to, from) => { const { loggedIn, fetch, user } = useUserSession(); const meta = to.meta; await fetch(); if(meta.requiresAuth && !loggedIn.value) { return navigateTo({ name: 'user-login', query: { t: encodeURIComponent(to.path) } }); } else if(!!meta.usersGoesTo && loggedIn.value) { return navigateTo(meta.usersGoesTo); } else if(!!meta.validState && (!loggedIn.value || (user.value?.state ?? 0) === 0)) { return abortNavigation({ statusCode: 401, message: 'Unauthorized', }); } else if(!!meta.rights) { if(!user.value) return abortNavigation({ statusCode: 401, message: 'Unauthorized', }); else if(!hasPermissions(user.value.permissions, meta.rights)) return abortNavigation({ statusCode: 401, message: 'Unauthorized', }); } return; });