tmerclub-multishop/src/permission.js

66 lines
2.3 KiB
JavaScript
Raw Normal View History

2025-03-20 13:37:24 +08:00
import router from './router'
import { getToken } from '@/utils/auth' // get token from cookie
import { useUserStore } from '@/stores/modules/user.js'
import { usePermissionStore } from '@/stores/modules/permission.js'
const whiteList = ['/login', '/register', '/forget-password', '/reset-password'] // no redirect whitelist
router.beforeEach(async (to, from, next) => {
const userStore = useUserStore()
const permissionStore = usePermissionStore()
const hasToken = getToken()
if (hasToken) {
if (to.path === '/login') {
next({ path: '/' })
} else {
const hasRoles = userStore.roles && userStore.roles.length > 0
if (hasRoles && router.options.isAddDynamicMenuRoutes) {
if (userStore.isPassShop) {
if ((from.path === '/multishop/shop-process' || from.path === '/' || from.path === '/dashboard') && to.path === '/multishop/shop-process') {
next('/dashboard')
} else if (to.path === '/multishop/shop-process') {
next('/401')
}
} else {
if (to.path !== '/multishop/shop-process' && to.path !== '/401' && to.path !== '/404') {
next('/multishop/shop-process')
}
}
next()
} else {
try {
// 获取用户信息
const userInfo = await userStore.getUserInfo()
// 获取权限信息
await userStore.listPermissions()
let menuIds = []
if (!userInfo.isAdmin) {
// 获取菜单信息
menuIds = await userStore.listMenuIds()
}
const accessRoutes = await permissionStore.generateRoutes(menuIds)
accessRoutes.forEach(route => {
if (route.path[0] !== '/') {
route.path = `/${route.path}`
}
router.addRoute(route)
})
// eslint-disable-next-line require-atomic-updates
router.addRoute({ path: '/:pathMatch(.*)*', redirect: { path: '/404' } })
router.options.isAddDynamicMenuRoutes = true
next({ ...to, replace: true })
} catch (error) {
// eslint-disable-next-line no-console
await userStore.resetToken()
next(`/login?redirect=${to.path}`)
}
}
}
} else {
if (whiteList.indexOf(to.path) !== -1) {
next()
} else {
next(`/login?redirect=${to.path}`)
}
}
})