liuyun b807cc7df8
Some checks are pending
CI / backend (push) Waiting to run
CI / frontend (push) Waiting to run
docs(spec): 归档 online-session-management + 同步 session 主 spec
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-11 21:38:24 +08:00

2.5 KiB
Raw Blame History

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 剩余时长)。