Files
SaaS-lib/lib/saas/router/guard/permission-guard.ts

109 lines
3.8 KiB
TypeScript
Raw Normal View History

2024-05-15 17:29:42 +08:00
import type { Router } from 'vue-router';
import { NsMessage } from '/nerv-lib/component/message';
import { authorizationService } from '/nerv-base/store/modules/authorization-service';
import { appConfigStore } from '/nerv-base/store/modules/app-config';
import { Cookies } from '/nerv-lib/util/cookie';
import { setRouteChange } from '/nerv-lib/util/routeChange';
2024-07-11 15:53:41 +08:00
console.log(import.meta.env.VITE_PUBLIC_PATH);
2024-05-15 17:29:42 +08:00
export function createPermissionGuard(router: Router, whiteNameList: string[]) {
const authorizationStore = authorizationService();
const appConfig = appConfigStore();
router.beforeEach(async (to, from, next) => {
if (!appConfig.userCustomRouterGuard) {
setRouteChange(to);
if (to?.query?.nervsid) {
2024-07-11 15:53:41 +08:00
if (to?.query?.nervsid !== Cookies.get(`${import.meta.env.VITE_PUBLIC_PATH}-nervsid`)) {
Cookies.set(`${import.meta.env.VITE_PUBLIC_PATH}-nervsid`, to?.query?.nervsid);
2024-05-15 17:29:42 +08:00
try {
const info = await appConfig.userInfo();
await authorizationStore.initUserResource();
authorizationStore.initMenuResource();
appConfig.setUserInfo(info.data);
info.success
2024-07-11 15:53:41 +08:00
? window.sessionStorage.setItem(
import.meta.env.VITE_PUBLIC_PATH,
JSON.stringify(info.data),
)
2024-05-15 17:29:42 +08:00
: '';
} catch (err) {
2024-07-11 15:53:41 +08:00
Cookies.remove(`${import.meta.env.VITE_PUBLIC_PATH}-nervsid`);
2024-05-15 17:29:42 +08:00
}
}
}
if (
2024-07-11 15:53:41 +08:00
!Cookies.get(`${import.meta.env.VITE_PUBLIC_PATH}-nervsid`) &&
2024-05-15 17:29:42 +08:00
to.fullPath !== '/login' &&
to.name &&
!whiteNameList.includes(to.name as string)
) {
2024-06-11 16:45:18 +08:00
NsMessage.error('登录信息已过期,请重新登录!', 1);
2024-05-15 17:29:42 +08:00
next({ name: 'login' });
} else {
// 存储用户信息
if (to.fullPath !== '/login') {
2024-07-11 15:53:41 +08:00
const initUserInfo = window.sessionStorage[import.meta.env.VITE_PUBLIC_PATH];
if (!initUserInfo && Cookies.get(`${import.meta.env.VITE_PUBLIC_PATH}-nervsid`)) {
2024-05-15 17:29:42 +08:00
try {
const info = await appConfig.userInfo();
2024-07-11 15:53:41 +08:00
info.data
? window.sessionStorage.setItem(
import.meta.env.VITE_PUBLIC_PATH,
JSON.stringify(info.data),
)
: '';
2024-05-15 17:29:42 +08:00
} catch (err) {
2024-07-11 15:53:41 +08:00
Cookies.remove(`${import.meta.env.VITE_PUBLIC_PATH}-nervsid`);
2024-05-15 17:29:42 +08:00
}
} else {
if (initUserInfo) {
const userInfo = JSON.parse(initUserInfo);
authorizationStore.setEnterpriseName(
!userInfo.organizationalName ? '' : userInfo.organizationalName,
);
}
}
}
if (to.name && !whiteNameList.includes(to.name as string)) {
if (appConfig.enablePermissions !== undefined && appConfig.enablePermissions) {
if (authorizationStore.getInitRouterList.length === 0) {
await authorizationStore.initUserResource();
}
if (
authorizationStore.checkPermissionRouter(
to.meta?.bindView ? to.meta?.bindView : to.name,
)
) {
next();
} else {
if (to.path === '/') {
next({ name: authorizationStore.getInitRouterList[0] });
} else {
// console.log(authorizationStore.getInitRouterList);
NsMessage.error('无该页面权限!');
next({ name: 'error403' });
}
}
} else {
next();
}
} else {
next();
}
}
} else {
await appConfig.userCustomRouterGuard(
to,
from,
next,
whiteNameList,
authorizationStore,
appConfig,
);
}
});
}