hhz_restructure/src/router/guard/permission-guard.js

52 lines
1.6 KiB
JavaScript

/*
* @Author: whyafterme
* @Date: 2022-11-03 11:31:21
* @LastEditTime: 2022-11-21 09:02:20
* @LastEditors: whyafterme
* @Description:
* @FilePath: \new\src\router\guard\permission-guard.js
*/
import { useUserStore } from '@/store/modules/user'
import { usePermissionStore } from '@/store/modules/permission'
import { NOT_FOUND_ROUTE, REDIRECT_ROUTE } from '@/router/routes'
import { getUserInfo, signinRedirect, signoutRedirect } from '@/utils/oidc/index.js'
export function createPermissionGuard(router) {
const userStore = useUserStore()
const permissionStore = usePermissionStore()
router.beforeEach(async(to, from, next) => {
const oidcUser = await getUserInfo()
if (oidcUser) {
const hasRoutes = !!permissionStore.permissionRoutes.length
if (hasRoutes) {
next()
} else {
try {
const { clientRoleList } = oidcUser.profile
const { VITE_CLIENT_ID } = import.meta.env
const { roleId } = clientRoleList.find((item) => {
return item.clientId === VITE_CLIENT_ID
})
// await userStore.getUserInfo()
// const routes = await permissionStore.generateRoutes(roleId)
const routes = await permissionStore.generateRoutesMock()
routes.forEach((item) => {
router.addRoute(item)
})
router.addRoute(NOT_FOUND_ROUTE)
router.addRoute(REDIRECT_ROUTE)
next({ ...to, replace: true })
} catch (error) {
signinRedirect()
}
}
} else {
if (to.path === '/login') {
next()
} else {
signinRedirect()
}
}
})
}