4.3 KiB
4.3 KiB
问题陈述
基于现有 auth 与 upms 模块完成前后端可联调实现(含 Web 管理端与小程序最小可用链路),从“占位/硬编码”升级为“数据库驱动 + 令牌会话治理 + 端侧鉴权一致”。
当前状态(已确认)
auth已有登录/刷新/当前用户接口,但服务实现为硬编码用户,未校验真实凭据,refresh 逻辑未做轮换与持久化(backend/auth/src/main/java/com/k12study/auth/controller/AuthController.java (18-47),backend/auth/src/main/java/com/k12study/auth/service/AuthService.java (18-74))。upms已有 routes/currentUser/areas/tenants/departments 接口,但全部为静态返回;且模块配置排除了数据源与 MyBatis 自动装配(backend/upms/src/main/java/com/k12study/upms/service/impl/UpmsQueryServiceImpl.java (17-132),backend/upms/src/main/resources/application.yml (1-18))。- 数据库脚本已提供认证与权限组织核心表(含
auth.tb_auth_refresh_token、auth.tb_auth_login_audit、upms.tb_sys_*、班级/文件/站内信相关表),但代码未接入(init/pg/auth/10_create_auth_tables.sql (1-64),init/pg/upms/10_create_upms_tables.sql (1-437))。 - Web 端当前仅保存 accessToken,未使用 refreshToken,且路由初始化失败时会回退默认路由,缺少严格登录守卫(
frontend/src/pages/LoginPage.tsx (17-21),frontend/src/utils/storage.ts (1-12),frontend/src/router/AppRouter.tsx (56-83))。 - 小程序端仅有 API/request 封装,无登录页、无 token 持久化与鉴权头注入(
app/src/api/auth.js (1-13),app/src/utils/request.js (1-53))。 - 目标能力与约束已在模块计划中明确(
docs/plan/modules/auth.md (1-40),docs/plan/modules/upms.md (1-40))。
实施方案
1) 契约与模块边界收口
统一 auth/upms 前后端契约与字段口径:
auth令牌 claims 扩展为userId/tenantId/tenantPath/deptId/deptPath/adcode/roleCodes/clientType/sessionId,并在 API DTO 中显式化。upms保留现有 5 个查询接口,同时补齐模块计划中已冻结的班级、文件、站内信接口。- 将 Web 与 Mini 的端侧约束(
clientType + roleCodes)纳入统一鉴权输入,避免服务内散落判断。
2) 后端 Auth 实现
- 接入持久层(PostgreSQL + MyBatis Plus),补齐
auth模块数据源配置与仓储层。 - 实现真实登录链路:账号/手机号凭据校验、用户状态校验、角色准入校验(Mini 仅
STUDENT)。 - 实现 refresh token 持久化与“一次一换”轮换:写入
tb_auth_refresh_token、刷新时撤销旧 token 并发放新 token。 - 实现登录与刷新审计:写入
tb_auth_login_audit,记录成功/失败与关键上下文。 - 加入学生端会话上限策略(上限 3,超限淘汰最久未活跃会话)。
3) 后端 UPMS 实现
- 以数据库查询替换
UpmsQueryServiceImpl静态数据,按租户上下文返回 routes/currentUser/areas/tenants/departments。 - 建立角色-菜单-权限聚合链路(必要时补齐
user-role关系表与增量 SQL)。 - 增加班级、文件、站内信接口实现,统一租户隔离与对象存在性校验。
- 统一
upms返回结构与前端类型,避免前端做业务字段兜底。
4) 前端实现(Web + Mini)
- Web:重构会话层(access + refresh + 当前用户),增加登录守卫与 401 自动刷新/失效登出。
- Web:动态路由加载改为“鉴权成功后加载”,移除未登录默认路由回退。
- Web:补齐
upms数据消费页(至少 currentUser/组织树/消息入口)的真实接口接入。 - Mini:补齐登录与 token 持久化,request 层注入
Authorization,处理 token 续期与失效。 - Mini:按
clientType=MINI+role=STUDENT约束仅开放学生端能力。
5) 联调与验收
- 在
boot-dev(本地聚合)与gateway + auth + upms(分布式)两种模式分别完成联调验证。 - 验证项覆盖:登录/刷新/当前用户、动态路由、组织树、Mini 登录、站内信已读链路。
- 运行后端编译与前端构建,补充最小接口/服务测试,确认关键鉴权与租户隔离场景通过。
交付顺序
建议按“Auth 后端 -> UPMS 后端 -> Web 前端 -> Mini 前端 -> 双模式联调”执行,避免前端先行导致接口反复改动。