diff --git a/src/api/system/user-api.ts b/src/api/system/user-api.ts index 2068362..cb084e4 100644 --- a/src/api/system/user-api.ts +++ b/src/api/system/user-api.ts @@ -214,6 +214,16 @@ export default UserAPI /** 登录用户信息 */ export interface UserInfo { + /** 权限数据列表(权限标识数组) */ + permission_data?: string[] + + /** 角色列表 */ + role?: Array<{ + id?: number | string + RoleName?: string + name?: string + permissionId?: string + }> /** 用户ID */ userId?: string diff --git a/src/utils/auth.ts b/src/utils/auth.ts index e258c70..5858fa2 100644 --- a/src/utils/auth.ts +++ b/src/utils/auth.ts @@ -45,10 +45,58 @@ export const AuthStorage = { } /** - * 权限判断 - 已移除 + * 权限判断 + * @param value 需要的权限标识(字符串或字符串数组) + * @param type 权限类型:'button' 按钮权限,'role' 角色权限 + * @returns 是否有权限 */ export function hasPerm(value?: string | string[], type?: 'button' | 'role'): boolean { - return true + // 如果没有传入权限值,默认返回 true(不限制) + if (!value) { + return true + } + + // 获取用户信息 + const userStore = useUserStoreHook() + const userInfo = userStore.userInfo + + // 如果没有用户信息,返回 false + if (!userInfo || (!userInfo.id && !userInfo.userId)) { + return false + } + + // 如果是角色权限检查 + if (type === 'role') { + const userRoles = userInfo.role || [] + const requiredRoles = Array.isArray(value) ? value : [value] + + // 检查用户是否有任一所需角色 + return requiredRoles.some((role) => { + // 支持角色名称或角色ID匹配 + return userRoles.some((userRole: any) => { + if (typeof userRole === 'string') { + return userRole === role + } + return userRole.RoleName === role || userRole.id === role || userRole.name === role + }) + }) + } + + // 按钮权限检查(默认) + // 支持多种字段名:permission_data(后端返回)、perms(标准字段) + const userPermissions = (userInfo as any).permission_data || userInfo.perms || [] + const requiredPerms = Array.isArray(value) ? value : [value] + + // 检查用户是否有任一所需权限 + // 如果用户没有任何权限数据,返回 false + if (userPermissions.length === 0) { + return false + } + + // 检查是否包含所需权限 + return requiredPerms.some((perm) => { + return userPermissions.includes(perm) + }) } /**