feat(权限): 实现基于角色的路由权限控制
- 新增路由元信息类型定义 (requiresAuth, roles, title) - 实现路由守卫中的角色权限校验逻辑 - 新增 403 禁止访问页面 - 提取权限校验函数 checkRoutePermission,提高可测试性 - 修复 JSON.parse 异常处理,增强健壮性 - 优化页面标题动态设置 测试优化: - 重构 global-setup.ts,支持 JAR 文件启动后端服务 - 优化测试用例等待逻辑,减少硬编码延迟 - 简化 playwright 配置,移除多浏览器支持 - 新增路由权限守卫单元测试 关联需求:权限系统完善
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
>
|
||||
<template #title>
|
||||
<el-icon v-if="menu.icon">
|
||||
<component :is="menu.icon" />
|
||||
<component :is="iconComponents[menu.icon]" />
|
||||
</el-icon>
|
||||
<span>{{ menu.name }}</span>
|
||||
</template>
|
||||
@@ -21,7 +21,7 @@
|
||||
:index="menu.path"
|
||||
>
|
||||
<el-icon v-if="menu.icon">
|
||||
<component :is="menu.icon" />
|
||||
<component :is="iconComponents[menu.icon]" />
|
||||
</el-icon>
|
||||
<span>{{ menu.name }}</span>
|
||||
</el-menu-item>
|
||||
@@ -29,6 +29,13 @@
|
||||
|
||||
<script setup lang="ts">
|
||||
import type { MenuItem as MenuItemType } from '@/stores/permission'
|
||||
import * as ElementPlusIconsVue from '@element-plus/icons-vue'
|
||||
import { markRaw, type Component } from 'vue'
|
||||
|
||||
const iconComponents: Record<string, Component> = {}
|
||||
Object.keys(ElementPlusIconsVue).forEach(key => {
|
||||
iconComponents[key] = markRaw(ElementPlusIconsVue[key as keyof typeof ElementPlusIconsVue])
|
||||
})
|
||||
|
||||
defineProps<{
|
||||
menu: MenuItemType
|
||||
|
||||
Reference in New Issue
Block a user