From 7ac1772570f5c62903d2ce6f56e7c739c9f4cd01 Mon Sep 17 00:00:00 2001 From: wanghu Date: Fri, 16 Oct 2026 08:30:52 +0800 Subject: [PATCH] admin --- .../aspect/ControllerUserContextAspect.java | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/yunhai/workweekplan/aspect/ControllerUserContextAspect.java b/src/main/java/com/yunhai/workweekplan/aspect/ControllerUserContextAspect.java index 3033534..46a54a8 100644 --- a/src/main/java/com/yunhai/workweekplan/aspect/ControllerUserContextAspect.java +++ b/src/main/java/com/yunhai/workweekplan/aspect/ControllerUserContextAspect.java @@ -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)。 *

@Order(1) 先于审计日志切面(Order 3)执行,保证日志能取到 UserContext。 * 取用户优先级:方法参数 BoaUser → BoaUserContext 静态持有者 → request attribute; - * 角色切换信息从 currentrole(Header/Query,URL 编码 JSON)解析。

+ * 角色:BoaUser.currentRole(服务端会话,权威)优先,currentrole(Header/Query,URL 编码 JSON)兜底。

*/ @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");