Files
novalon-manage-system/novalon-manage-web/src/utils/permission.ts
T
张翔 f0746d06db feat(web): 迁移前端源代码(任务 T4.1)
- 删除 novalon 前端 src/ 下所有文件
- 从 gym-manage 复制前端 src/ 完整目录树
- 替换 gym-manage-api → novalon-manage-api
- 替换 gym_system → manage_system
- 无 gym 残留引用
2026-04-27 14:57:45 +08:00

79 lines
2.3 KiB
TypeScript

import { usePermissionStore } from '@/stores/permission'
export interface PermissionMapping {
[key: string]: string | string[]
}
const permissionMapping: PermissionMapping = {
'GET /users': 'system:user:list',
'POST /users': 'system:user:add',
'PUT /users': 'system:user:edit',
'DELETE /users': 'system:user:remove',
'GET /roles': 'system:role:list',
'POST /roles': 'system:role:add',
'PUT /roles': 'system:role:edit',
'DELETE /roles': 'system:role:remove',
'GET /menus': 'system:menu:list',
'POST /menus': 'system:menu:add',
'PUT /menus': 'system:menu:edit',
'DELETE /menus': 'system:menu:remove',
'GET /dict': 'system:dict:list',
'POST /dict': 'system:dict:add',
'PUT /dict': 'system:dict:edit',
'DELETE /dict': 'system:dict:remove',
'GET /config': 'system:config:list',
'POST /config': 'system:config:list',
'PUT /config': 'system:config:list',
'DELETE /config': 'system:config:list',
'GET /sys/config': 'system:config:list',
'POST /sys/config': 'system:config:list',
'PUT /sys/config': 'system:config:list',
'DELETE /sys/config': 'system:config:list',
'GET /files': 'system:file:list',
'POST /files': 'system:file:upload',
'DELETE /files': 'system:file:delete',
}
export function checkApiPermission(method: string, url: string): boolean {
const key = `${method.toUpperCase()} ${url.split('?')[0]}`
let requiredPermission = permissionMapping[key]
if (!requiredPermission) {
const baseUrl = url.split('?')[0].replace(/\/\d+$/, '')
const baseKey = `${method.toUpperCase()} ${baseUrl}`
requiredPermission = permissionMapping[baseKey]
}
if (!requiredPermission) {
return true
}
if (key === 'GET /menus') {
return true
}
const stored = localStorage.getItem('permission')
if (!stored) {
return true
}
try {
const data = JSON.parse(stored)
const permissions = data.permissions || []
if (Array.isArray(requiredPermission)) {
return requiredPermission.some(p => permissions.includes(p))
}
return permissions.includes(requiredPermission)
} catch (error) {
console.error('解析权限数据失败:', error)
return true
}
}
export function getRequiredPermission(method: string, url: string): string | string[] | null {
const key = `${method.toUpperCase()} ${url.split('?')[0]}`
return permissionMapping[key] || null
}