33 lines
2.5 KiB
Markdown
33 lines
2.5 KiB
Markdown
## 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 剩余时长)。
|