diff --git a/novalon-manage-web/src/layouts/DefaultLayout.vue b/novalon-manage-web/src/layouts/DefaultLayout.vue
index 6a1ebb1..44fb64a 100644
--- a/novalon-manage-web/src/layouts/DefaultLayout.vue
+++ b/novalon-manage-web/src/layouts/DefaultLayout.vue
@@ -17,70 +17,11 @@
active-text-color="#409eff"
router
>
-
-
- 仪表盘
-
-
-
-
- 系统管理
-
-
- 用户管理
-
-
- 角色管理
-
-
- 菜单管理
-
-
-
-
-
- 系统配置
-
-
- 字典管理
-
-
- 参数配置
-
-
-
-
-
- 审计中心
-
-
- 登录日志
-
-
- 操作日志
-
-
- 异常日志
-
-
-
-
-
- 通知中心
-
-
- 通知公告
-
-
-
-
-
- 文件管理
-
-
- 文件列表
-
-
+
@@ -123,22 +64,24 @@
diff --git a/novalon-manage-web/src/utils/permission.ts b/novalon-manage-web/src/utils/permission.ts
new file mode 100644
index 0000000..feae404
--- /dev/null
+++ b/novalon-manage-web/src/utils/permission.ts
@@ -0,0 +1,50 @@
+import { usePermissionStore } from '@/stores/permission'
+
+export interface PermissionMapping {
+ [key: string]: string | string[]
+}
+
+const permissionMapping: PermissionMapping = {
+ 'GET /users': 'user:list',
+ 'POST /users': 'user:create',
+ 'PUT /users': 'user:update',
+ 'DELETE /users': 'user:delete',
+ 'GET /roles': 'role:list',
+ 'POST /roles': 'role:create',
+ 'PUT /roles': 'role:update',
+ 'DELETE /roles': 'role:delete',
+ 'GET /menus': 'menu:list',
+ 'POST /menus': 'menu:create',
+ 'PUT /menus': 'menu:update',
+ 'DELETE /menus': 'menu:delete',
+ 'GET /dict': 'dict:list',
+ 'POST /dict': 'dict:create',
+ 'PUT /dict': 'dict:update',
+ 'DELETE /dict': 'dict:delete',
+ 'GET /sys/config': 'config:list',
+ 'POST /sys/config': 'config:create',
+ 'PUT /sys/config': 'config:update',
+ 'DELETE /sys/config': 'config:delete',
+}
+
+export function checkApiPermission(method: string, url: string): boolean {
+ const permissionStore = usePermissionStore()
+
+ const key = `${method.toUpperCase()} ${url.split('?')[0]}`
+ const requiredPermission = permissionMapping[key]
+
+ if (!requiredPermission) {
+ return true
+ }
+
+ if (Array.isArray(requiredPermission)) {
+ return requiredPermission.some(p => permissionStore.hasPermission(p))
+ }
+
+ return permissionStore.hasPermission(requiredPermission)
+}
+
+export function getRequiredPermission(method: string, url: string): string | string[] | null {
+ const key = `${method.toUpperCase()} ${url.split('?')[0]}`
+ return permissionMapping[key] || null
+}
diff --git a/novalon-manage-web/src/utils/request.ts b/novalon-manage-web/src/utils/request.ts
index e2b8511..8202357 100644
--- a/novalon-manage-web/src/utils/request.ts
+++ b/novalon-manage-web/src/utils/request.ts
@@ -1,5 +1,6 @@
import axios, { AxiosRequestConfig } from 'axios'
import { generateSignatureHeaders } from './signature'
+import { checkApiPermission } from './permission'
const request = axios.create({
baseURL: '/api',
@@ -37,6 +38,15 @@ request.interceptors.request.use(
config.headers = config.headers || {}
Object.assign(config.headers, signatureHeaders)
+ if (!checkApiPermission(method, url)) {
+ const error = new Error('无权限访问此接口')
+ ;(error as any).response = {
+ status: 403,
+ data: { message: '无权限访问此接口' }
+ }
+ return Promise.reject(error)
+ }
+
return config
},
(error) => Promise.reject(error)