feat(permission): 添加菜单数据权限功能

- 新增菜单数据规则表和角色菜单数据规则关联表
- 实现菜单数据权限切面和处理器
- 添加数据规则条件和变量枚举
- 实现变量替换工具类和规则构建逻辑
- 在权限分配中集成菜单数据规则关联功能
- 优化部门ID解析逻辑,支持从用户信息中获取默认部门
- 添加菜单组件查询方法和公司访问上下文拦截器改进
This commit is contained in:
wuzongyong
2026-01-28 09:13:23 +08:00
parent 6ea653ca43
commit 2227271d08
37 changed files with 2288 additions and 1 deletions

View File

@@ -0,0 +1,60 @@
package com.zt.plat.module.system.enums.permission;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据规则条件枚举
*
* 用于菜单数据规则的条件类型
*
* @author ZT
*/
@Getter
@AllArgsConstructor
public enum DataRuleConditionEnum {
EQ("=", "等于"),
NE("!=", "不等于"),
GT(">", "大于"),
GE(">=", "大于等于"),
LT("<", "小于"),
LE("<=", "小于等于"),
IN("IN", "包含"),
NOT_IN("NOT_IN", "不包含"),
LIKE("LIKE", "模糊匹配"),
LEFT_LIKE("LEFT_LIKE", "左模糊"),
RIGHT_LIKE("RIGHT_LIKE", "右模糊"),
NOT_LIKE("NOT_LIKE", "不匹配"),
IS_NULL("IS_NULL", "为空"),
IS_NOT_NULL("IS_NOT_NULL", "不为空"),
SQL_RULE("SQL_RULE", "自定义SQL");
/**
* 条件符号
*/
private final String condition;
/**
* 条件描述
*/
private final String description;
/**
* 根据条件符号查找枚举
*
* @param condition 条件符号
* @return 枚举值
*/
public static DataRuleConditionEnum findByCondition(String condition) {
if (condition == null) {
return null;
}
for (DataRuleConditionEnum value : values()) {
if (value.condition.equals(condition)) {
return value;
}
}
return null;
}
}

View File

@@ -0,0 +1,53 @@
package com.zt.plat.module.system.enums.permission;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 数据规则变量枚举
*
* 用于菜单数据规则的变量替换
*
* @author ZT
*/
@Getter
@AllArgsConstructor
public enum DataRuleVariableEnum {
USER_ID("#{userId}", "当前用户ID"),
USERNAME("#{username}", "当前用户名"),
DEPT_ID("#{deptId}", "当前用户部门ID"),
DEPT_IDS("#{deptIds}", "当前用户所有部门ID"),
ORG_CODE("#{orgCode}", "当前用户组织编码"),
TENANT_ID("#{tenantId}", "当前租户ID"),
CURRENT_DATE("#{currentDate}", "当前日期"),
CURRENT_TIME("#{currentTime}", "当前时间");
/**
* 变量名
*/
private final String variable;
/**
* 变量描述
*/
private final String description;
/**
* 根据变量名查找枚举
*
* @param variable 变量名
* @return 枚举值
*/
public static DataRuleVariableEnum findByVariable(String variable) {
if (variable == null) {
return null;
}
for (DataRuleVariableEnum value : values()) {
if (value.variable.equals(variable)) {
return value;
}
}
return null;
}
}