Hair Keeper v1.0.0:一个高度集成、深度定制、约定优于配置的全栈Web应用模板,旨在保持灵活性的同时提供一套基于成熟架构的开发底座,自带身份认证、权限控制、丰富前端组件、文件上传、后台任务、智能体开发等丰富功能,提供AI开发辅助,免于纠结功能如何实现,可快速上手专注于业务逻辑
This commit is contained in:
58
src/constants/permissions.ts
Normal file
58
src/constants/permissions.ts
Normal file
@@ -0,0 +1,58 @@
|
||||
// 权限常量列表
|
||||
// 每个权限标识一个功能点,用于前后端一致的权限控制
|
||||
|
||||
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
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user