flaschengeist-frontend/src/boot/login.ts

55 lines
1.6 KiB
TypeScript

import { boot } from 'quasar/wrappers';
import { useMainStore } from 'src/store';
import { hasPermissions } from 'src/utils/permission';
import { RouteRecord } from 'vue-router';
export default boot(({ router }) => {
router.beforeEach((to, from, next) => {
console.log(`from ${from.fullPath} to ${to.fullPath}`);
const store = useMainStore();
if (to.path == from.path) {
return;
}
if (to.path.startsWith('/main')) {
// Secured area (LOGIN REQUIRED)
// Check login is ok
if (!store.session || store.session.expires <= new Date()) {
console.log('Nope, logout');
void store.logout();
return;
}
// Check if special permissions are required
if (
to.matched.every((record: RouteRecord) => {
if (!('meta' in record) || !('permissions' in record.meta)) return true;
if ((<{ permissions: FG.Permission[] }>record.meta).permissions) {
console.log(record.meta);
const h = hasPermissions((<{ permissions: FG.Permission[] }>record.meta).permissions);
console.log(h);
return h;
}
})
) {
console.log('ok next');
next();
} else {
console.log('Back loggin');
next({ name: 'login', query: { redirect: to.fullPath } });
}
} else {
if (to.name == 'login' && store.user && !to.params['logout']) {
// Called login while already logged in
console.log('Ok next');
void next({ name: 'dashboard' });
} else {
// We are on the non secured area
console.log('Ok non sec');
next();
}
}
});
});