diff --git a/src/main/java/com/yunhai/agent/auth/RoleResolver.java b/src/main/java/com/yunhai/agent/auth/RoleResolver.java index 6301057..19bb4b1 100644 --- a/src/main/java/com/yunhai/agent/auth/RoleResolver.java +++ b/src/main/java/com/yunhai/agent/auth/RoleResolver.java @@ -36,24 +36,32 @@ import java.util.concurrent.ConcurrentHashMap; * *
★ 为什么 {@code roleName} 优先:它是平台下发、与门户顶栏一致的权威标签, + * 先认名称可避免部署环境里 {@code agent.roles.*} 配置漂移(被旧角色号覆盖)把身份判错。 */ @Slf4j @Component public class RoleResolver { - /** 角色名关键词:命中即判定(角色号未配置时的兜底,跨学校更稳) */ + /** 角色名关键词:命中即判定(角色号未配置时的兜底,跨学校更稳) + * + *
★ 不含「主任」:它与「班主任」冲突,会把普通教师误判成管理员。 + * 教务主任/教导主任等仍可经「教务」「教导」… 命中,或由角色号配置兜底。 + */ private static final String[] ADMIN_WORDS = { - "管理", "校长", "园长", "局长", "领导", "主任", "教务", "督导", "书记", "党委" + "管理", "校长", "园长", "局长", "领导", "教务", "教导", "督导", "书记", "党委" }; - private static final String[] TEACHER_WORDS = {"教师", "老师", "班主任", "教工"}; + private static final String[] TEACHER_WORDS = {"教师", "老师", "班主任", "教工", "职工"}; private final AgentSettings settings; @@ -62,6 +70,13 @@ public class RoleResolver { public RoleResolver(AgentSettings settings) { this.settings = settings; + // ★ 启动时把「本次真正生效」的角色配置打出来:一旦部署环境存在配置漂移 + // (外部 application-prod.yml / 环境变量覆盖了 agent.roles),据此一眼可见。 + AgentSettings.Roles c = settings.getRoles(); + log.info("[角色配置] student={} teacher={} parent={} admin={} | type: student={} teacher={} admin={} parent={} | admin-also-teacher={}", + c.getStudent(), c.getTeacher(), c.getParent(), c.getAdmin(), + c.getStudentUserTypes(), c.getTeacherUserTypes(), c.getAdminUserTypes(), c.getParentUserTypes(), + c.isAdminAlsoTeacher()); } /** 解析用户角色集合(永不为空,至少含 GUEST) */ @@ -131,13 +146,23 @@ public class RoleResolver { return sb.toString(); } - /** 当前身份 → 智能体角色:角色号配置优先,角色名关键词兜底 */ + /** + * 当前身份 → 智能体角色。 + * + *
★ 先按 {@code roleName} 判定,再退回 {@code roleId}:
+ * 平台下发的 {@code roleName}(老师 / 校领导 / 学生 / 家长 / 局领导 / 工作号 / 管理员)
+ * 是平台自己的权威标签,与用户在门户里看到的一致;先认它,
+ * 可以免疫 {@code agent.roles.*} 配置漂移(部署环境里被旧的角色号配置覆盖)导致的身份误判。
+ * 名称里看不出身份的(如「工作号」)再按角色号 {@code roleId} 映射。
+ */
private Set