Files
mokeegateway/memory/session-20260615-2.md
2026-07-15 16:13:27 +08:00

2.8 KiB
Raw Blame History

name, description, metadata
name description metadata
session-20260615-2 2026-06-15 第2次会话 — sys_user唯一索引删除修复逻辑删除与uk_username冲突
type date sessionNumber startTime
session 2026-06-15 2 2026-06-15

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_usernameuk_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 账号登录,确认统计数据只显示绑定系统范围内