2.8 KiB
2.8 KiB
name, description, metadata
| name | description | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|
| session-20260615-2 | 2026-06-15 第2次会话 — sys_user唯一索引删除,修复逻辑删除与uk_username冲突 |
|
2026-06-15 第2次会话
会话摘要
修复了 sys_user 表逻辑删除(is_deleted)与唯一索引 uk_username/uk_email 冲突的问题。删除了数据库唯一索引,改为应用层代码校验。
问题描述
- 现象:创建用户时报
Duplicate entry 'nginxadmin' for key 'sys_user.uk_username' - 根因:MyBatis-Plus
@TableLogic自动在查询时过滤is_deleted=1,但数据库唯一索引不区分逻辑删除标记。已删用户仍占着 username → 新用户无法创建同名 → 插入时索引冲突
关键操作
删除唯一索引,改应用层校验
- 做了什么:从
sys_user表删除uk_username和uk_email两个唯一索引,用户名/邮箱唯一性交给UserServiceImpl.add()中的selectCount校验 - 原因:唯一索引不区分
is_deleted,逻辑删除的记录仍阻塞同名用户创建 - 结果:已删除的用户不再占坑,可创建同名新用户;活跃用户的唯一性由应用层保证
涉及文件
| 文件 | 改动 |
|---|---|
sql/qa_ddl.sql |
删除 uk_username、uk_email 索引定义 |
init_database.py |
同上 |
init_qa_database.py |
同上 |
QA 数据库 mokeegatewayqa |
DROP INDEX uk_username, uk_email |
PROD 数据库 mokeegateway |
DROP INDEX uk_username, uk_email |
代码层无需改动
UserServiceImpl.add() 已有校验:selectCount + MyBatis-Plus @TableLogic 自动过滤已删除记录,重复用户名会提示"用户名已存在"。
待处理
- 验证:创建一个用户 → 删除 → 再创建同名用户,确认不再报错
2. 首页仪表盘数据权限
- 做了什么:DashboardController.stats() 增加数据权限过滤。非 super_admin 用户首页统计卡片和登录趋势图只看自己绑定系统的数据(排除网关平台)
- 原因:之前首页显示全部系统/全部用户的全局统计数据,业务管理员不应看到平台全局数据
- 结果:
- 系统总数 → 用户绑定系统数(拦截器已排除网关)
- 用户总数 → JOIN sys_user_system 统计绑定系统下的用户
- 今日登录/在线/30天趋势 → system_id IN (用户绑定系统) 过滤
- super_admin 行为不变
- 复用 UserContextInterceptor 已有的 systemIds(已排除网关),不重复查库
- 涉及文件:
DashboardController.java
待处理
- 验证:创建一个用户 → 删除 → 再创建同名用户,确认不再报错
- 部署后验证首页数据权限:用非 super_admin 账号登录,确认统计数据只显示绑定系统范围内