53 lines
1.7 KiB
JavaScript
53 lines
1.7 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()
|
|
const oidcUser = true
|
|
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()
|
|
}
|
|
}
|
|
})
|
|
}
|