2.5 KiB
2.5 KiB
Why
当前会话不可在线观测,唯一「踢下线」手段是重置密码(连带吊销全部会话);账号安全锁定仅有登录失败触发的临时 Redis 阈值,没有管理员可见、可操作的锁定/解锁闭环。安全审计要求会话可管理、锁定可处置,租户管理员也需要一个「在线会话」面板即时强退风险账号/设备。
What Changes
- 会话标识:JWT(access 与 refresh)引入会话标识
sid,使「单个会话精确强退」成为可能;「踢全部」复用现有 tokenVersion 机制。 - 在线会话域(新增):列出活跃会话(用户 / 设备 IP / User-Agent / 登录时间 / 过期时间),支持按单个会话强退、按用户踢全部。
- 账号锁定(独立字段):User 新增
locked_at/lock_reason,与status(启用/停用)解耦;锁定账号在登录 / 刷新 / 鉴权处统一拒绝。 - 用户域锁定/解锁:管理员可锁定(附原因,锁定即踢全部会话)与解锁(清空锁定并清除登录失败计数)。
- 前端:新增「在线会话」页面(系统监控下);用户管理页新增「锁定/解锁」操作。
Capabilities
New Capabilities
backend/session: 在线会话——活跃会话列表、单会话强退、按用户踢全部。frontend/AD/session: 在线会话管理页面——会话列表 + 强退按钮 + 用户维度踢全部。
Modified Capabilities
backend/users: 用户域新增「锁定/解锁」与「踢全部会话」行为。frontend/AD/user: 用户管理页新增「锁定/解锁」操作。shared/data-model:user实体新增locked_at/lock_reason字段;用户状态机改为「启用/停用」+ 独立「锁定」标志。shared/api-contract: 核心域接口目录新增/sessions;用户域新增锁定/解锁/踢全部会话接口。
Impact
- 后端:
auth(issue加sid、JwtAuthGuard 校验 sid 存活、登录拒绝锁定)、users(lock/unlock/kick-all)、新增sessions模块;Prisma(User加列);tenant-template(新增会话菜单/接口资源 + 用户锁定/解锁/踢全部接口资源 + 按钮)。 - 前端:新增
session页面、user页锁定/解锁操作、api/session.ts与api/user.ts扩展。 - 数据:Prisma migration(
sys_user加locked_at/lock_reason)。 - Redis:新增会话吊销黑名单 key(
sessionRevoked:{sid},TTL = access token 剩余时长)。