修改登录,添加超级管理员权限
This commit is contained in:
@ -4,6 +4,16 @@ import Layout from '@/layout/index.vue'
|
||||
import { useUserStore } from '@/stores/user'
|
||||
import BomManage from '@/views/bom/BomManage.vue'
|
||||
|
||||
// [新增] 扩展 RouteMeta 类型定义,防止 TS 报错
|
||||
declare module 'vue-router' {
|
||||
interface RouteMeta {
|
||||
title?: string
|
||||
icon?: string
|
||||
hidden?: boolean
|
||||
roles?: string[] // 允许的角色列表
|
||||
}
|
||||
}
|
||||
|
||||
const routes: Array<RouteRecordRaw> = [
|
||||
// 1. 登录页
|
||||
{
|
||||
@ -169,17 +179,25 @@ const routes: Array<RouteRecordRaw> = [
|
||||
{
|
||||
path: '/system',
|
||||
component: Layout,
|
||||
// [修复] 添加 redirect,点击父菜单时跳转到子页面
|
||||
redirect: '/system/user-create',
|
||||
meta: {
|
||||
title: '系统管理',
|
||||
icon: 'Setting',
|
||||
roles: ['super_admin', 'supervisor']
|
||||
// [修复] 使用大写角色名,匹配后端常量
|
||||
roles: ['SUPER_ADMIN', 'SUPERVISOR']
|
||||
},
|
||||
children: [
|
||||
{
|
||||
path: 'user-create',
|
||||
name: 'UserCreate',
|
||||
component: () => import('@/views/system/UserCreate.vue'),
|
||||
meta: { title: '账号开通', icon: 'User' }
|
||||
meta: {
|
||||
title: '账号开通',
|
||||
icon: 'User',
|
||||
// 子路由也建议加上权限限制
|
||||
roles: ['SUPER_ADMIN', 'SUPERVISOR']
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -204,7 +222,16 @@ router.beforeEach((to, from, next) => {
|
||||
const userStore = useUserStore()
|
||||
|
||||
const token = userStore.token || localStorage.getItem('token')
|
||||
const userRole = userStore.role || localStorage.getItem('role') || 'user'
|
||||
|
||||
// [修复] 优先从 user 对象获取,并统一转大写,防止大小写不一致导致权限失效
|
||||
// 注意:Store 中存储的可能是 user.role 或者直接是 role,根据你之前的 store 结构适配
|
||||
const rawRole = userStore.user?.role || userStore.role || localStorage.getItem('role') || 'user'
|
||||
const userRole = String(rawRole).toUpperCase()
|
||||
|
||||
// 调试日志:如果跳转有问题,请按 F12 查看控制台输出
|
||||
if (to.path.includes('/system')) {
|
||||
console.log(`路由守卫检查: Path=${to.path}, UserRole=${userRole}, Required=${to.meta.roles}`)
|
||||
}
|
||||
|
||||
if (to.path === '/login') {
|
||||
if (token) {
|
||||
@ -220,10 +247,13 @@ router.beforeEach((to, from, next) => {
|
||||
return
|
||||
}
|
||||
|
||||
// 权限检查逻辑
|
||||
if (to.meta.roles && Array.isArray(to.meta.roles)) {
|
||||
// [修复] to.meta.roles 里已经是大写了,userRole 也转大写了,现在可以安全比对
|
||||
if (to.meta.roles.includes(userRole)) {
|
||||
next()
|
||||
} else {
|
||||
console.warn(`权限不足: 用户角色 ${userRole} 不在允许列表 ${to.meta.roles} 中`)
|
||||
next('/dashboard')
|
||||
}
|
||||
} else {
|
||||
@ -231,4 +261,4 @@ router.beforeEach((to, from, next) => {
|
||||
}
|
||||
})
|
||||
|
||||
export default router
|
||||
export default router
|
||||
Reference in New Issue
Block a user