chenxing 712e94803f fix(identity): 身份读侧口径统一 + 写口收口(退组/转学/本校移动/追加语义/按校收窄)
读侧(同一根因:sys_user.roles 停写后读侧漏改):
- 组用户管理列表/导出「用户身份」列只取当前组范围解析出的学校集合内的身份行(原为全平台身份并集)
- 推送 roleList 改读 sys_user_role_rel(原读停写列 → 新建/改过身份的用户恒为空,用于 lwj 空推)
- 推送订阅「推送角色」过滤与 /oapi/group/users 角色过滤共用 findUserIdsWithAnyRole(原读停写列会静默漏人)

写口收口:
- 退组补 alignIdentity(退掉某校最后一个组时清出该校身份行与滞留激活身份,消除已离校校领导仍带该校管理范围)
- 激活身份滞留检查由「只比 schoolId」升级为 (roleId, schoolId) 对(同校校领导→老师后不再返回旧角色)
- 跨校转学把源校正常态身份行复制到目标校(原源校清出、目标校不建 → 用户零身份落地)
- moveUserWithinSchool 只重建本校子树内组关系:他校关系与他校 isMain 一律不动,目标组主标记沿用原本校旧关系(不制造双主组)
- 开放接口编辑身份改追加语义(只加不删,学校缺省按 groupId 解析;BschClass 无需改动),管理端保持全量覆盖并加护栏(有 schoolId 无 roleIds 报错)
- 角色授权模块按上下文学校收窄(schId/groupId 非空时只认该校子树内归属组绑定,NULL 全局兜底行仍生效)
- /oapi/group/users 轻量 BoaUser 补 status;SysUserVo.roles 删除(读死列最后一个展示位)

契约与文档:oapi 接口文档 6 处修订 + SDK(yh-openapi-client)三处注释同步;知识库 §3 新增身份写口纪律、§8 记 D3 决议与三项待决策
测试:139 → 158(+19 例)
2026-09-18 11:12:56 +08:00
2026-09-10 15:00:54 +08:00
2026-08-13 21:30:19 +08:00
2026-09-07 18:17:02 +08:00
2026-08-18 21:51:18 +08:00
2026-08-13 21:30:19 +08:00
ci
2026-09-07 20:12:41 +08:00
S
Description
managed by projman
1.5 MiB
Languages
Java 99.1%
JavaScript 0.6%
Python 0.2%