56 lines
3.8 KiB
Markdown
56 lines
3.8 KiB
Markdown
# 平台总后台审计报告(2026-07-27)
|
||
|
||
## 范围与结论
|
||
|
||
本次审计覆盖 46 个平台后台资源:34 个可写资源、11 个只读资源和 1 个仅追加的安全事件处置资源。后端资源契约现同时声明领域、资源名、HTTP 路径、页面类型和读写模式,并由运行时注册路由生成清单。前端审计据此逐项校验后端路由、前端资源声明、实际加载的页面组件和带菜单元数据的路由;任一层缺失均以 `领域/资源: missing <layer>` 失败。
|
||
|
||
## 发现与处置
|
||
|
||
| 发现 | 处置 | 验证 |
|
||
| --- | --- | --- |
|
||
| 只读页面的静态检查未覆盖状态变更调用 | 将 `resourceApi.updateStatus` 纳入只读页的变更操作集合,同时覆盖 create、update、archive | `audit-check.test.mjs` 的只读页用例 |
|
||
| 前端资源与后端路由只按资源名和文件名进行粗略匹配 | `ResourceContract.Path` 成为唯一后端路径声明;审计逐项校验 GET/POST/PUT/PATCH/DELETE(按资源模式)以及资源路径一致性 | Go 的 `TestEveryContractHasRegisteredRoute` 和 `pnpm audit:platform` |
|
||
| 页面存在但未被菜单路由实际加载时可能漏检 | 审计读取全部路由模块,解析页面动态导入,再确认页面通过 `getResource(契约路径)` 使用对应资源且路由具有 `menu.platform.*` 元数据 | `audit-check.test.mjs` 的菜单映射用例 |
|
||
| API 或页面可能展示、提交数据库自增 `id` / `*_id` | 对 `src/api` 与 `src/views` 全量扫描;详情页的显式过滤逻辑被识别为防护而非泄漏 | `pnpm audit:platform` |
|
||
| 仅追加处置和只读状态写入存在审计盲区 | 处置资源必须由 `saf_event` 详情动作触发、不可拥有独立页面;后端仅允许 GET/POST,且按事件标识查询处置历史;只读资源扫描 API、路由和页面中的 `updateStatus` | 6 个 `audit-check.test.mjs` 用例及逐契约路由方法测试 |
|
||
|
||
## 身份字段与保留理由
|
||
|
||
- 对外 HTTP 仅使用 `identity` 及关联的 `*_identity`;数据库主键 `id` 和关系外键 `*_id` 仍用于 GORM 关联、索引和内部查询,并由响应投影剔除,不能删除。
|
||
- `status`、`version`、`created_at`、`updated_at` 是归档、乐观并发和审计所需实体元数据,予以保留。
|
||
- `product_snapshot`、`report_metric_snapshot` 保留历史商品及报表快照,避免后续主数据变更影响历史记录。
|
||
- 审计的 `before_data`、`after_data`、`operator_identity`,以及审批的 `handler_identity`、`handled_at` 用于追踪处置人和决策,不可作为冗余清除。
|
||
|
||
## 冗余清理
|
||
|
||
未删除模型字段或页面。审计没有找到同时满足“不在需求、无后端调用、无前端消费者、无测试或迁移依赖”的候选项;为避免移除潜在兼容入口,保留现有非契约文件,且不将它们纳入菜单与资源契约。
|
||
|
||
## 验证命令
|
||
|
||
以下命令在提交前执行:
|
||
|
||
```powershell
|
||
cd backend/api
|
||
go test ./...
|
||
go build ./cmd/main
|
||
go test ./internal/routers -run '^TestEveryContractHasRegisteredRoute$' -v
|
||
|
||
cd ../../frontend/platform_admin
|
||
node --test scripts/audit-check.test.mjs
|
||
pnpm type:check
|
||
pnpm lint
|
||
pnpm audit:platform
|
||
pnpm build
|
||
```
|
||
|
||
| 命令 | 退出码 | 结果 |
|
||
| --- | --- | --- |
|
||
| `go test ./...` | 0 | 通过 |
|
||
| `go build ./cmd/main` | 0 | 通过 |
|
||
| `go test ./internal/routers -run '^TestEveryContractHasRegisteredRoute$' -v` | 0 | 通过 |
|
||
| `node --test scripts/audit-check.test.mjs` | 0 | 通过,6 个审计用例 |
|
||
| `pnpm type:check` | 0 | 通过 |
|
||
| `pnpm audit:platform` | 0 | 通过 |
|
||
| `pnpm build` | 0 | 通过 |
|
||
| `pnpm lint` | 1 | 阻塞:Biome 配置在本目录要求 `.gitignore`。以 `--vcs-root=../..` 启动后发现 187 个既有全仓格式/未使用变量错误;未将无关全仓格式化混入本次审计修复。 |
|