admin
build / build-push (push) Successful in 55s

This commit is contained in:
wanghu
2026-10-16 08:30:52 +08:00
parent 420335bce1
commit 7ac1772570
@@ -6,6 +6,7 @@ import com.yunhai.workweekplan.model.UserSysRole;
import com.yunhai.workweekplan.utils.IpUtils;
import com.yunhai.workweekplan.utils.UserContext;
import com.yunhai.platform.auth.BoaUserContext;
import com.yunhai.platform.utils.model.BoaRoleInfo;
import com.yunhai.platform.utils.model.BoaUser;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
@@ -27,7 +28,7 @@ import java.util.List;
* 当前用户上下文填充切面(移植自 UserclassService ControllerUserContextAspect)。
* <p>@Order(1) 先于审计日志切面(Order 3)执行,保证日志能取到 UserContext。
* 取用户优先级:方法参数 BoaUser → BoaUserContext 静态持有者 → request attribute;
* 角色切换信息从 currentrole(Header/Query,URL 编码 JSON)解析。</p>
* 角色:BoaUser.currentRole(服务端会话,权威)优先,currentrole(Header/Query,URL 编码 JSON)兜底。</p>
*/
@Aspect
@Component
@@ -74,7 +75,7 @@ public class ControllerUserContextAspect {
}
}
populateUserContext(boaUser, userSysRole);
populateUserContext(boaUser, resolveRole(boaUser, userSysRole));
try {
return joinPoint.proceed();
@@ -84,6 +85,24 @@ public class ControllerUserContextAspect {
}
}
/**
* 角色/学校上下文:服务端会话角色(BoaUser.currentRole,用户中心权威数据)优先,
* currentrole 头仅兜底——前端会透传 localStorage 里的 currentRole,切换身份后可能过期
* (实测出现过头里 roleId=1 教师、会话里 roleId=7 管理员的情况)。
*/
private UserSysRole resolveRole(BoaUser boaUser, UserSysRole headerRole) {
BoaRoleInfo sessionRole = boaUser == null ? null : boaUser.getCurrentRole();
if (sessionRole == null || sessionRole.getRoleId() == null) {
return headerRole;
}
UserSysRole merged = new UserSysRole();
merged.setRoleId(sessionRole.getRoleId());
merged.setChildId(sessionRole.getChildId());
merged.setSchId(sessionRole.getSchId());
merged.setUserId(boaUser.getId());
return merged;
}
/** 从 currentrole(URL 编码,Header 或 Query 参数)解析 UserSysRole */
private UserSysRole resolveUserSysRoleFromRequest(HttpServletRequest request) {
String raw = request.getHeader("currentrole");