permission.ts
1.15 KB
import type { Router, RouteRecordNormalized } from 'vue-router';
import NProgress from 'nprogress'; // progress bar
import usePermission from '@/hooks/permission';
import { useUserStore, useAppStore } from '@/store';
import { appRoutes } from '../routes';
import { NOT_FOUND } from '../constants';
import { isLogin } from '@/utils/auth';
export default function setupPermissionGuard(router: Router) {
router.beforeEach(async (to, from, next) => {
const appStore = useAppStore();
const userStore = useUserStore();
const Permission = usePermission();
const permissionsAllow = Permission.accessRouter(to);
if (isLogin() && appStore.menuFromServer) {
await userStore.info();
if (!appStore.appAsyncFatherMenu.length) {
await appStore.fetchServerMenuConfig();
next({ ...to, replace: true })
}else{
next();
}
} else {
// eslint-disable-next-line no-lonely-if
if (permissionsAllow) next();
else {
const destination =
Permission.findFirstPermissionRoute(appRoutes, userStore.roles) ||
NOT_FOUND;
next(destination);
}
}
NProgress.done();
});
}