blob: 22a3a8ceb5d3aa25293b2df1f44a8dda35538083 [file] [log] [blame]
import { createRouter, createWebHistory } from 'vue-router';
//Do not change store or routes import.
//Exact match alias set to support
//dotenv customizations.
import store from '../store';
import routes from './routes';
const router = createRouter({
history: createWebHistory(process.env.BASE_URL),
routes,
linkExactActiveClass: 'nav-link--current',
scrollBehavior() {
return { x: 0, y: 0 };
},
});
function allowRouterToNavigate(to, next, currentUserRole) {
if (to.matched.some((record) => record.meta.requiresAuth)) {
if (store.getters['authentication/isLoggedIn']) {
if (to.meta.exclusiveToRoles) {
// The privilege for the specific router was verified using the
// exclusiveToRoles roles in the router.
if (to.meta.exclusiveToRoles.includes(currentUserRole)) {
next();
} else {
next('*');
}
return;
}
next();
return;
}
next('/login');
} else {
next();
}
}
router.beforeEach((to, from, next) => {
let currentUserRole = store.getters['global/userPrivilege'];
// condition will get satisfied if user refreshed after login
if (!currentUserRole && store.getters['authentication/isLoggedIn']) {
// invoke API call to get the role ID
let username = localStorage.getItem('storedUsername');
store.dispatch('authentication/getUserInfo', username).then(() => {
let currentUserRole = store.getters['global/userPrivilege'];
allowRouterToNavigate(to, next, currentUserRole);
});
} else {
allowRouterToNavigate(to, next, currentUserRole);
}
});
export default router;