feat: 完成动态菜单和API权限检查功能

This commit is contained in:
张翔
2026-04-08 07:08:42 +08:00
parent 76a7735099
commit 6c0e510d64
3 changed files with 73 additions and 68 deletions
@@ -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
}