@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user