docs: 完善工单 #65 待验收归档

ila
2026-08-14 15:12:27 +08:00
parent b0837a5fb0
commit ab36e7572a
2 changed files with 72 additions and 42 deletions
@@ -0,0 +1,72 @@
# 65 Sense设备台账与凭据边界
- 类型:需求
- 所属 Epic:#7
- 所属 MVP / 版本:#8
- 状态:待验收
- 日期:2026-08-14
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/65
- Pull Request:https://git.ilapage.cn/ila/yovision/pulls/83
- 主项目 / 主 Agent:Sense / Sense Agent
- 写路径:仅 `Sense/` 与本任务对应 Wiki、docs 镜像
## 背景与目标
在 #61 冻结 GoAdmin 产品骨架和 #64 独立身份能力上,重建设备台账、角色权限和摄像头凭据边界。界面服务网管、实施人员及非技术现场人员,通用外壳和组件复用 go-admin-ui;Brain、Bell 不参与且不作为验收依赖。
## 最终方案
- 新增视频、雷达、门磁、按钮、穿戴和其他类型设备台账,提供列表、新建、编辑和停用;停用替代物理删除。
- 编辑、停用、凭据更新使用版本号乐观并发控制,过期写入返回 409;分页上限为每页 100,不把默认 16 路配额写成容量上限。
- 当前视频类型标记适配器可接入,其他类型明确显示“适配器未就绪”。
- ONVIF/RTSP 凭据按设备和用途分离,以外部 `SENSE_CREDENTIAL_KEY` 驱动 AES-256-GCM 加密;HTTP 和页面只返回配置状态,不提供读取凭据或密文接口。
- 复用 GoAdmin 的 JWT、Casbin、操作审计、动态菜单、页面容器、Element Plus 表单/表格/分页/Dialog/Tag、权限按钮和 Axios 封装。
- admin、implementation_operator、site_admin 可维护设备与凭据,viewer 只读;未知 JSON 字段拒绝,凭据字段加入日志脱敏。
- 与建单方案的路径差异已在工单记录:按当前 GoAdmin 目录使用 `cmd/migrate/migration/version/` 和 `app/admin/router/sense_device.go`,没有修改共享路径。
## 修改文件
- `Sense/server/app/sense/credential/`:凭据模型、AES-256-GCM vault 和作用域测试。
- `Sense/server/app/sense/device/`:设备模型、白名单 DTO、服务、API 与测试。
- `Sense/server/app/admin/router/sense_device.go`:注册受 JWT、Casbin 和权限动作保护的设备路由。
- `Sense/server/cmd/migrate/migration/version/2026081414000_device.go`:设备表、凭据表、菜单、角色关联和 Casbin 权限。
- `Sense/server/common/middleware/logger.go`:摄像头凭据字段脱敏。
- `Sense/ui/src/views/sense/device/`、`Sense/ui/src/api/sense/device.js`:设备管理页面、请求白名单和接口。
- `Sense/README.md`、Wiki 架构/业务规则/本地验证/交付指南:配置、安全边界和操作说明。
## 验收结果
| 验收标准 | 结果 |
|---|---|
| 设备列表、新建、编辑、停用与中文字段 | 自动化及 PostgreSQL HTTP 集成通过 |
| 版本冲突和严格请求白名单 | 过期写入 409、未知字段 400 |
| 多类型与非视频适配器状态 | 通过;20 条非视频分页验证未受 16 路配额限制 |
| 凭据分离加密、只写不可读、审计脱敏 | 通过;两种 purpose、密文最短 138 字节、审计明文匹配 0 |
| 角色权限 | admin/operator/site 可维护,viewer 读取 200、写入 403 |
| GoAdmin/go-admin-ui 复用与无多余入口 | 通过代码与路由检查;未新增通用 UI 组件 |
| 文档 | Wiki 已更新、docs 镜像检查通过 |
## 测试
- `go test ./...`:通过。
- `go vet ./...`:通过。
- `go build ./...`:通过。
- `corepack pnpm@9.15.1 install --frozen-lockfile`:通过。
- `corepack pnpm@9.15.1 lint`:0 错误,30 条继承的上游 warning。
- `corepack pnpm@9.15.1 test:unit`:8 个 suite、32 项测试通过。
- `corepack pnpm@9.15.1 build:prod`:通过,6 条继承的构建 warning。
- PostgreSQL 17 迁移及重复迁移:通过,菜单和权限记录未重复。
- HTTP 集成:bootstrap 200、未知字段 400、创建 200、更新 200、过期写入 409、凭据更新 200、viewer 读取 200、viewer 写入 403。
- 数据库证据:设备 3 条;凭据 2 条、2 种 purpose;凭据审计 1 条;审计测试明文匹配 0。
- `python dev_scripts/sync_wiki_docs.py --check`:通过。
- `git diff --check`:通过。
- **未验证部分**:真实摄像头接入、ONVIF/RTSP 连通和目标客户浏览器属于后续 #66 及现场验收;本工单不伪造其结果。
## 回退与遗留
回退 PR #83 的两个提交可移除本次入口;数据库表与权限记录保留,避免破坏审计或凭据数据。后续 #66 才消费本工单的凭据边界并实现真实 ONVIF/RTSP 接入。
## 相关提交
- `be091f0` feat: 重建设备台账与凭据边界 (#65)
- `d31c35f` docs: 记录 Sense 设备台账与凭据边界 (#65)
@@ -1,42 +0,0 @@
# 65 Sense设备台账与凭据边界
- 类型:需求 / 缺陷 / 重构
- 所属 Epic:#
- 所属 MVP / 版本:#
- 状态:待验收 / 已完成
- 日期:2026-08-14
- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/65
- Wiki 页面:Task-65-Sense设备台账与凭据边界
- Wiki revision:见本地镜像头
## 背景与目标
<!-- 原来有什么问题,这次达到什么结果。 -->
## 最终方案
<!-- 说明实际实现。与建单方案不同之处必须写清原因。 -->
## 修改文件
- `<文件>`:<改动说明>
## 验收结果
| 验收标准 | 结果 |
|---|---|
| | 通过 / 未通过 |
## 测试
- 执行命令:`<命令>`
- 结果:
- **未验证部分**:<!-- 必填;没有就写“无”。 -->
## 遗留问题
<!-- 没有就删除本节。 -->
## 相关提交
- `<提交哈希>` <提交说明>