export default defineNuxtRouteMiddleware(async (to, from) => { const { loggedIn, fetch, user } = useUserSession(); const meta = to.meta; await fetch(); if(!!meta.guestsGoesTo && !loggedIn.value) { return navigateTo(meta.guestsGoesTo); } else if(meta.requireAuth && !loggedIn.value) { return abortNavigation({ statusCode: 401, message: 'Unauthorized', }); } 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 { let valid = false; for(let i = 0; i < meta.rights.length; i++) { const list = meta.rights[i].split(' '); if(list.every(e => user.value.permissions.includes(e))) { valid = true; break; } } if(!valid) return abortNavigation({ statusCode: 401, message: 'Unauthorized', }); } } return; });