基础平台实现完成报告¶
日期:2026-10-29。本报告对应已批准的 platform-001 技术包,交付鉴权、角色绑定的操作级权限、用户/角色/权限目录/菜单管理,以及 Docker 本地运行。不是整个 MVP 公网发布完成声明。
本地可审阅入口为 http://127.0.0.1:8088。Java/Maven 命名空间为 team.lab_edu,来源见 ADR-004。实际运行指南包含初始化、独立验收和停止步骤。
任务完成表¶
| 阶段 | 任务 | 交付与验证 |
|---|---|---|
| Setup | T001—T006 | 工程、锁定依赖、配置与真实数据库测试支持完成 |
| Tests | T007—T013 | 黑盒场景先形成,最终已执行;不是只靠编译放行 |
| Core | T014—T040 | 迁移、模型、框架安全、策略与全部业务端点完成;clean verify 52 项通过 |
| Integration | T041—T060 | Refine/Next 接真实 core,12 项 Chromium 整组通过;中途失败均修复后重验 |
| Polish | T061—T062 | 实际指南、证据与本报告已交付并校验,逐条勾选完成 |
| Progress | T063 | 路线图已同步真实进度;本包 63/63 完成,未把 CI/文档站/公网发布计为完成 |
Spec 符合度表¶
| 规格与范围 | 结果 | 核实依据 |
|---|---|---|
| auth FR-001—005、014—015 | 自助注册仅学生、不自动登录;框架认证、本人身份与当前会话退出完成 | AuthenticationApiTest、SessionEndpointsTest、authentication.spec.ts |
| auth FR-006—007 | 30 分钟空闲/8 小时绝对期限;成功业务活动、版本撤权、全部旧会话失效与不复活完成 | SessionPolicyTest、ExtendedGovernanceApiTest、账户/角色浏览器场景 |
| auth FR-008、011—012 | 失败统一、5 次/15 分钟暂停、网络与未知退出不假成功、切换/迟到缓存清除完成 | 单元/HTTP 与 authentication/admin-read 浏览器场景 |
| auth FR-009—010、013 | 临时密码受限、Unicode 边界、原密码与不同新密码、受控初始化及恢复保护完成 | PasswordChangeApiTest、BootstrapIntegrationTest、account-lifecycle.spec.ts |
| auth FR-016—017 | 资源 × 操作按角色分配,无个人例外或通用行/字段策略;范围和恢复集合由 core 核实 | access-control 契约、治理/API/角色浏览器场景 |
| admin FR-001—006 | 用户摘要、分页三项筛选、独立状态/角色/密码操作及一次临时值完成 | AdminReadApiTest、UserManagementApiTest、account-lifecycle/admin-read |
| admin FR-007—013 | 自定义角色、规范名称、已有许可、完整旧/新范围、关联删除与并发恢复不变量完成 | RoleManagementApiTest、ExtendedGovernanceApiTest、roles.spec.ts |
| admin FR-014—016 | 固定菜单展示编辑、不借菜单授予权限、恢复入口与版本/故障反馈完成 | MenuManagementApiTest、NavigationServiceTest、menus/roles 浏览器场景 |
| infra D001—D004 | 两套四服务健康、同源 API、非 root/只读应用、命名卷与 secret 生命周期通过 | 运行证据(本地资料,未发布) |
| infra D005、路线图骨架/文档站 | 独立库完成;新远端、CI、文档站、Cloudflare/TLS 尚未交付 | 保持未完成,不推定流水线或公网结果 |
正式 SC 的逐条后端映射保留在 core-scenarios-20261029.md(本地资料,未发布),浏览器原始场景名称与结果见 browser-verify-20261029.json(本地资料,未发布)。
宪法符合度表¶
| 原则 | 核实结果 |
|---|---|
| 职责隔离 | core 拥有全部业务和授权不变量;web 消费同源接口/派生 access;infra 只有编排;docs 只保存文档、契约、证据 |
| 成熟框架优先 | Spring Security、PBKDF2、Spring Session JDBC、JPA/Flyway;Refine CORE/官方适配/Ant Design;未自研密码或第二套会话认证系统 |
| 默认拒绝与唯一权威 | 方法级授权加事务内当前操作者复核;前端按钮/菜单不构成授权;权限目录引用由 core 校验 |
| 并发与验证 | 统一治理行锁、JPA 编辑版本与认证版本分别使用;真实 PostgreSQL 验证末位管理员、删除/分配与活动时间不回退 |
| 流程 | 批准记录和 ADR 可追溯;任务逐条按证据勾选,T058 整组失败后曾重新打开,修复后重验 |
| 来源与红线 | 没有读取 GitLab group 下旧仓库;不添加实验任务/报告/评分或范围外业务;未重复询问既有批准 |
| 命名与发布边界 | 用户自有域名 lab-edu.team 对应 team.lab_edu;GitLab 托管地址不充当包身份;本地 HTTP 与公网 TLS 清楚区分 |
测试覆盖表¶
| 层次 | 真实结果 | 持久证据 |
|---|---|---|
| 完整后端 | 52 passed,0 failures/errors/skipped,迁移后 clean verify 无旧包编译类 | 后端 JSON(本地资料,未发布) |
| 实际响应契约 | 真实封闭对象字段/必需项/枚举核对;完整 OpenAPI 3.1 parser 通过 19 paths / 23 operations / 26 schemas | ContractResponseTest;infra/tools/validate-openapi.mjs |
| 完整浏览器 | 12 passed,单 worker、每项一次、无自动重试或跳过,真实 Docker 四服务 | 浏览器 JSON(本地资料,未发布) |
| 前端工程 | lint/typecheck/production build 与多阶段镜像构建通过 | 最终 Compose build/up --build 日志;运行镜像摘要见 infra 证据 |
| 正常本地栈 | 8088 登录/退出冒烟;1 个初始化管理员、3 个内置角色,和验收卷独立 | 空登录页(本地资料,未发布)、内置角色页(本地资料,未发布) |
| 文档与追溯 | 链接/表格、63 任务依赖、原始 5 份批准快照散列、ADR 与证据一致 | 文档校验(本地资料,未发布) |
发现并修复的问题包括:父子 ProviderManager 重复计数;菜单夹具未恢复全部展示属性;中文按钮默认空格与 Select 装饰冒号影响精确定位;角色多时需要搜索虚拟候选;受控 Checkbox 需等待 React 最终提交状态。最终整组 12/12 的证据保留,未把过程中的 11/12 写成通过。
边界:浏览器验证限 Chromium;CI、新远端和文档站未交付;Cloudflare DNS/TLS 未发布。Flyway 对 PostgreSQL 18.6 的已测试版本提示仍需部署前复核,真实迁移成功不等于上游兼容认证。可重建依赖、原始测试日志和构建产物保留于 node_modules/target/临时目录并忽略提交;持久证据不包含密码值。