// 权限常量列表 // 每个权限标识一个功能点,用于前后端一致的权限控制 export const Permissions = { USER_MANAGE: '用户管理', // SUPER_ADMIN_ONLY: '超级管理员' // 该权限不能被授权,因此注释掉,但在项目中统一用"SUPER_ADMIN_ONLY"表示超级管理员权限 } as const; export type Permission = typeof Permissions[keyof typeof Permissions]; export const ALL_PERMISSIONS: Permission[] = Object.values(Permissions); // 判断用户权限列表是否满足表达式,如 "A&B|(C&D)" export function evaluatePermissionExpression( expr: string, userPermissions: string[] ): boolean { if (!expr || expr.trim() === '') { // expr为空、null或者undefined都返回true return true; } // 分词 const tokens: string[] = [] const regex = /(\&|\||\(|\))/ expr.split(regex).map(s => s.trim()).filter(s => s).forEach(tok => tokens.push(tok)) let pos = 0 function parseExpr(): boolean { let value = parseTerm() while (tokens[pos] === '|') { pos++ value = value || parseTerm() } return value } function parseTerm(): boolean { let value = parseFactor() while (tokens[pos] === '&') { pos++ value = value && parseFactor() } return value } function parseFactor(): boolean { const tok = tokens[pos++] if (tok === '(') { const value = parseExpr() if (tokens[pos] === ')') pos++ return value } // 普通权限名 return userPermissions.includes(tok) } try { return parseExpr() } catch { return false } }