refactor: 会话失效、数据权限和实时推送重构

This commit is contained in:
Ray.Hao
2026-02-12 17:19:42 +08:00
parent 3a35b24476
commit faf6754bf4
44 changed files with 2145 additions and 515 deletions

View File

@@ -26,18 +26,15 @@ public interface JwtClaimConstants {
String DEPT_ID = "deptId";
/**
* 数据权限
* 数据权限列表
* <p>
* 存储用户所有角色的数据权限范围,用于实现多角色权限合并(并集策略)
*/
String DATA_SCOPE = "dataScope";
String DATA_SCOPES = "dataScopes";
/**
* 权限(角色Code)集合
*/
String AUTHORITIES = "authorities";
/**
* 安全版本号,用于按用户失效历史令牌
*/
String SECURITY_VERSION = "securityVersion";
}

View File

@@ -26,18 +26,19 @@ public interface RedisConstants {
* 认证模块
*/
interface Auth {
// 存储访问令牌对应的用户信息accessToken -> OnlineUser
// 存储访问令牌对应的用户会话信息accessToken -> UserSession
String ACCESS_TOKEN_USER = "auth:token:access:{}";
// 存储刷新令牌对应的用户信息refreshToken -> OnlineUser
// 存储刷新令牌对应的用户会话信息refreshToken -> UserSession
String REFRESH_TOKEN_USER = "auth:token:refresh:{}";
// 用户与访问令牌的映射userId -> accessToken
String USER_ACCESS_TOKEN = "auth:user:access:{}";
// 用户与刷新令牌的映射userId -> refreshToken
String USER_REFRESH_TOKEN = "auth:user:refresh:{}";
// 黑名单 Token(用于退出登录或注销)
// 已撤销 Token 的 JTI单端退出/会话注销):如果 jti 在撤销列表中,则 Token 立即无效
String BLACKLIST_TOKEN = "auth:token:blacklist:{}";
// 用户安全版本号(用于按用户失效历史 JWT
String USER_SECURITY_VERSION = "auth:user:security_version:{}";
String REVOKED_JTI = BLACKLIST_TOKEN;
// 用户 Token 生效起点(用于按用户失效历史 JWTtoken.iat < tokenValidAfter => token 无效
String USER_TOKEN_VALID_AFTER = "auth:user:token_valid_after:{}";
}
/**

View File

@@ -5,6 +5,10 @@ import lombok.Getter;
/**
* 数据权限枚举
* <p>
* value 越小,数据权限范围越大。
* 多角色数据权限合并策略取并集OR即用户能看到所有角色权限范围内的数据。
* 如果任一角色是 ALL则直接跳过数据权限过滤。
*
* @author Ray.Hao
* @since 2.3.0
@@ -13,12 +17,31 @@ import lombok.Getter;
public enum DataScopeEnum implements IBaseEnum<Integer> {
/**
* value 越小,数据权限范围越大
* 所有数据权限 - 最高权限,可查看所有数据
*/
ALL(1, "所有数据"),
/**
* 部门及子部门数据 - 可查看本部门及其下属所有部门的数据
*/
DEPT_AND_SUB(2, "部门及子部门数据"),
/**
* 本部门数据 - 仅可查看本部门的数据
*/
DEPT(3, "本部门数据"),
SELF(4, "本人数据");
/**
* 本人数据 - 仅可查看自己的数据
*/
SELF(4, "本人数据"),
/**
* 自定义部门数据 - 可查看指定部门的数据
* <p>
* 需要配合 sys_role_dept 表使用存储角色可访问的部门ID列表
*/
CUSTOM(5, "自定义部门数据");
private final Integer value;
@@ -28,4 +51,32 @@ public enum DataScopeEnum implements IBaseEnum<Integer> {
this.value = value;
this.label = label;
}
/**
* 判断是否为全部数据权限
*
* @param value 数据权限值
* @return 是否为全部数据权限
*/
public static boolean isAll(Integer value) {
return ALL.getValue().equals(value);
}
/**
* 根据值获取枚举
*
* @param value 数据权限值
* @return 枚举对象,未找到则返回 null
*/
public static DataScopeEnum getByValue(Integer value) {
if (value == null) {
return null;
}
for (DataScopeEnum dataScope : values()) {
if (dataScope.getValue().equals(value)) {
return dataScope;
}
}
return null;
}
}