import { Router } from 'vue-router' import { TOKEN_KEY, RBAC_ACCESS_TOKEN_KEY, AUTHORITIES_LIST_KEY, } from '@/global/cacheKey' import { PageEnum } from '@/enums/pageEnum' import { permissionStore } from '@/store/modules/permission' import Storage from 'web-storage-cache' const localStorage = new Storage() const allowList = [ PageEnum.BASE_AUTH, PageEnum.BASE_LOGIN, PageEnum.BASE_Instances_Design_Process_View, ] export function createPermissonGuard(router: Router) { router.beforeEach(async (to, _from, next) => { const rbacStorageToken = window.localStorage.getItem( RBAC_ACCESS_TOKEN_KEY ) const usePermissionStore = permissionStore() const _token = rbacStorageToken || localStorage.get(TOKEN_KEY) const _authoritiesList = localStorage.get(AUTHORITIES_LIST_KEY) if (_token) { if (to.path == PageEnum.BASE_LOGIN) { next('/') } else { if (usePermissionStore.authoritiesRoutes.length === 0) { await usePermissionStore.addRoutes(_authoritiesList) next({ ...to, replace: true, }) } else { next() } } } else { if (allowList.includes(to.path as PageEnum)) { next() } else { if (to.path == PageEnum.BASE_LOGIN) { next() } else { next(PageEnum.BASE_LOGIN) } } } }) }