docs: V1 测试版本全面端到端测试报告 + 专家评估 + wiki 更新
- 测试报告: 157 端点测试, Health 63% / AI+Dialysis+Plugin 92.4% - 专家评估: 产品7.3/架构7.6/安全7.0/测试4.1/UX7.6, 综合6.2 B- - CRITICAL×2: 空标签名500 + 媒体库路由冲突 - CONDITIONAL GO: 修复 P0 问题后可发布 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -203,6 +203,32 @@ impl ErpModule for AuthModule {
|
||||
- RLS 行级安全 — PostgreSQL Row Level Policy,中间件 SET `app.current_tenant_id`
|
||||
- Dead Letter — 失败事件自动写入 dead_letter_events 表
|
||||
|
||||
### DTO 输入校验规范
|
||||
|
||||
> **历史教训**: 2026-05-19 全系统 DTO 审计发现 44 处校验缺失(跨 6 个 crate),根因是 Update 结构体与 Create 结构体校验不对称。以下为强制规范。
|
||||
|
||||
**DTO 编写铁律:**
|
||||
|
||||
1. **所有请求结构体必须 `derive(Validate)`** — 包括 `Create*Req`、`Update*Req`、`Assign*Req`、查询参数等
|
||||
2. **Update 与 Create 校验对称** — `Create*Req` 有 `#[validate(length(...))]` 的字段,`Update*Req` 对应字段也必须有,不允许降级
|
||||
3. **枚举字段必须自定义校验** — `status`、`type`、`method`、`channel` 等有限集合字段,使用 `#[validate(custom(function = "..."))]` 限制合法值
|
||||
4. **Vec 字段必须检查非空** — `role_ids`、`permission_ids`、`scopes` 等用 `#[validate(length(min = 1))]`
|
||||
5. **密码字段加 max 限制** — `max = 128`,防止 bcrypt DoS
|
||||
6. **URL 字段必须防 SSRF** — 禁止 `localhost`/`127.0.0.1`/`0.0.0.0`,仅允许 `http://`/`https://` 协议
|
||||
7. **数值范围必须限定** — `rate_limit`、`timeout`、`token_lifetime` 等用 `#[validate(range(min, max))]`
|
||||
8. **handler 层必须调用 `validate()`** — 每个接收 `Json<T>` 的 handler 函数体内第一行必须 `req.validate().map_err(|e| AppError::Validation(e.to_string()))?`
|
||||
|
||||
**校验清单(新增 DTO 时逐项确认):**
|
||||
|
||||
- [ ] `derive(Validate)` 已添加
|
||||
- [ ] 字符串字段有 `length(min, max)` 限制
|
||||
- [ ] 枚举字段有 `custom` 校验函数
|
||||
- [ ] 集合字段有 `length(min = 1)` 非空检查
|
||||
- [ ] 数值字段有 `range(min, max)` 范围检查
|
||||
- [ ] URL 字段有协议和 SSRF 校验
|
||||
- [ ] handler 层调用了 `.validate()`
|
||||
- [ ] dto.rs 文件底部有对应的单元测试
|
||||
|
||||
## 5. 代码逻辑
|
||||
|
||||
⚡ **不变量**: 模块间只通过 EventBus 和 trait 通信,无直接依赖
|
||||
@@ -233,6 +259,7 @@ impl ErpModule for AuthModule {
|
||||
|
||||
| 日期 | 变更 |
|
||||
|------|------|
|
||||
| 2026-05-19 | 新增 §4 DTO 输入校验规范:44 处校验缺失修复总结 + 强制铁律 + 新增 DTO 检查清单 |
|
||||
| 2026-05-01 | 审计数据更新:模块状态表刷新(772 测试 / 328 路由 / 50 权限码)、审计发现清单 |
|
||||
| 2026-04-26 | 从 CLAUDE.md 迁移:目录结构、模块开发规范(§5)、安全注意事项(§7) |
|
||||
| 2026-04-25 | 全面更新:6 模块已实现状态表、预约 CAS 决策、PII 加密不变量、健康模块集成 |
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## 关键数字
|
||||
|
||||
> 最后更新: 2026-05-19 | 数据截止: feat/media-library-banner 分支(AI 对话全链路修复完成)
|
||||
> 最后更新: 2026-05-19 | 数据截止: feat/media-library-banner 分支(DTO 安全校验修复完成)
|
||||
|
||||
| 指标 | 值 |
|
||||
|------|-----|
|
||||
@@ -102,6 +102,8 @@
|
||||
| AI 侧边栏/ChatPage 刷新丢失消息 | [[frontend]] ChatPage | 无后端消息加载 API | **已修复:** 新增 `GET /ai/chat/sessions/{id}/messages` + 前端切换时加载历史 |
|
||||
| AI 菜单缺失 / 客服入口不存在 | [[database]] 菜单迁移 | AI 客服菜单未配置 | **已修复:** 迁移 000155-000156 添加 AI 客服菜单 + 角色绑定 |
|
||||
| copilot 患者风险 500 | [[erp-ai]] risk_service | SQL 列名/表名与实际 schema 不匹配 | **已修复:** `vital_signs_daily.device_type/avg_val` + `lab_report`(单数)+ JSON 查询 |
|
||||
| DTO 校验缺失(Update 无 Validate) | [[architecture]] §4 DTO 校验规范 | handler 层未调 `.validate()` | **已修复:** 6 个 crate / 8 个文件 / 44 处缺失修复(erp-auth + erp-config + erp-workflow + erp-message + erp-plugin + erp-health/oauth) |
|
||||
| SSRF 通过 ServiceTaskConfig.url | [[architecture]] §4 DTO 校验规范 | 工作流 ServiceTask 可访问内网 | **已修复:** 禁止 localhost/127.0.0.1 + 仅 http/https + method 白名单 GET/POST |
|
||||
|
||||
## 模块导航
|
||||
|
||||
|
||||
Reference in New Issue
Block a user