obsidian-visualiser/app/middleware/auth.global.ts

30 lines
973 B
TypeScript

import { hasPermissions } from "#shared/auth.util";
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;
});