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:
iven
2026-05-20 06:59:31 +08:00
parent f3bf8b3b1d
commit 6e8239daf0
6 changed files with 1173 additions and 1 deletions

View File

@@ -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 加密不变量、健康模块集成 |