docs: 归档工单 #65 待验收证据

This commit is contained in:
QiuSW
2026-08-14 15:23:37 +08:00
parent d31c35f098
commit f7eab5d8fa
2 changed files with 84 additions and 0 deletions
@@ -0,0 +1,80 @@
<!-- gitea-wiki-mirror:start -->
generated: true (请先修改 Gitea Wiki,禁止直接编辑本文件)
wiki_page: Task-65-Sense设备台账与凭据边界
wiki_url: https://git.ilapage.cn/ila/yovision/wiki/Task-65-Sense%E8%AE%BE%E5%A4%87%E5%8F%B0%E8%B4%A6%E4%B8%8E%E5%87%AD%E6%8D%AE%E8%BE%B9%E7%95%8C.-
wiki_revision: 35274c48097516957b189b8361b4f0513bb5ee31
synchronized_at: 2026-08-14T07:20:49Z
<!-- gitea-wiki-mirror:end -->
# 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)
+4
View File
@@ -107,6 +107,10 @@
{
"page": "Task-64-Sense登录RBAC与审计",
"path": "docs/task/64-Sense登录RBAC与审计.md"
},
{
"page": "Task-65-Sense设备台账与凭据边界",
"path": "docs/task/65-Sense设备台账与凭据边界.md"
}
]
}