[SEN] 在 GoAdmin 基线上重建设备台账与凭据边界 #65

Closed
opened 2026-08-14 10:26:39 +08:00 by ila · 4 comments
Owner

状态

已完成

基本信息

  • 类型:需求 / 新 GoAdmin 基线重建
  • 任务类型:单项目独立任务
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP:#8
  • 前置工单:#64
  • 是否允许与前置工单并行:否
  • 原因:设备 API、页面和审计必须复用已成立的 Sense 身份与权限边界。
  • 独立运行:Brain、Bell 均不启动时完成实现和验收

原始需求与追溯

  • 来源:用户于 2026-08-14 要求先建立 Sense 全部独立任务工单;Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix。
  • 需求摘要:在 #61 冻结 GoAdmin/go-admin-ui 源码派生骨架上,重新实现 Sense 独立纵切;旧 explore 只用于业务、测试和故障证据,不复制自研基础框架。
  • 历史对照:#23、#50、#56 及旧凭据隔离证据,只提取业务约束和测试用例。

目标

以 Device 为根实体重建设备台账,表达 modality/capabilities,并建立摄像头凭据只写不读、分用途隔离和审计边界。

做什么

实现设备列表、新建、编辑、停用、版本并发控制和能力状态;首期完整支持 video,未实现适配器显示 adapter_not_ready;凭据加密存储、更新触发重试且不回显。

不做什么

不连接 ONVIF/RTSP;不创建媒体路径;不在 URL、日志、响应、工单或测试夹具中保存真实凭据;不共享用户或数据库模型。

GoAdmin 复用与文档门禁

  • 必须沿用 #61 建立的 Cobra、Gin、GORM、Casbin、JWT、迁移、Router、Store、Axios、Layout 和权限链。
  • 优先复用 go-admin-ui 的页面容器、搜索栏、表格、表单、分页、Dialog、Tag、权限按钮和反馈组件。
  • 冻结 go-admin-doc 必查:models.md、dto.md、service.md、db.md、api.md,以及 go-admin-ui 表格、表单、Dialog、权限按钮实现。
  • 在工单评论记录实际阅读文件、采用方式及无法复用而新增的业务组件。
  • 不永久删除默认模块;无关能力采用菜单、路由、权限和后端访问同时禁用。

写路径

  • Sense/server/app/sense/device/**
  • Sense/server/app/sense/credential/**
  • Sense/server/cmd/migrate/migration/version/*device*
  • Sense/server/cmd/migrate/migration/version/*credential*
  • Sense/server/app/admin/router/sense_device.go
  • Sense/server/common/middleware/logger.go
  • Sense/server/common/middleware/logger_test.go
  • Sense/server/config/credential.env.example
  • Sense/README.md
  • Sense/ui/src/views/sense/device/**
  • Sense/ui/src/api/sense/device*
  • Sense/ui/src/components/sense/credential/**
  • Sense/server/app/sense/device/**/*_test.go
  • Sense/server/app/sense/credential/**/*_test.go
  • Sense/ui/tests/unit/sense/device*.spec.js

禁止写入:Brain/**、Bell/**、contracts/**、根级部署配置、docs/**、wiki-docs.json。如实现发现必须修改这些路径,停止并转协同工单。

文档影响

更新设备模型、能力语义、凭据边界、字段白名单和管理员操作入口。

长期文档先更新 Gitea Wiki;本地 docs/ 镜像由单一协调工单同步,避免共享路径冲突。

验收标准

  • 设备 CRUD、停用和乐观并发在 PostgreSQL 上成立
  • video 外的未实现 modality 明确显示 adapter_not_ready
  • 摄像头密码只写不读、不回显、不进日志和 URL
  • 中文名称与安装位置可保存、编辑和回读
  • 新建与编辑使用显式请求字段白名单
  • 权限与审计覆盖设备和凭据写操作

验证方式

  • Go 模型、服务、权限、加密与 PostgreSQL 集成测试
  • 前端 payload、中文字段、表格/表单/分页测试和 build
  • 日志与 API 响应秘密扫描
  • Brain/Bell 不启动的设备台账 smoke

风险与回退

凭据泄漏和并发覆盖属于高风险。仅使用合成秘密测试;回退迁移和任务分支,不接触生产设备数据。

协同需求摘要

本工单不建立跨项目契约。发现 Sense→Brain 源/区域配置或 Sense/Brain→Bell 事件/证据需求时,只记录生产者、消费者、目的与建议验证,不取得共享写路径。

实施结果(2026-08-14)

  • 实现提交:be091f0;长期文档提交:d31c35f;待验收归档提交:f7eab5d。
  • PR:#83 已合入 dev,merge commit 5856b76de993f074a2480a16d85ba578e7209b0e;未合入 main。
  • Wiki 归档:Task-65-Sense设备台账与凭据边界,验收 revision 9864d7fece44ca2e88ee8c3661101e3d6f74b030;镜像提交 3e859c3。
  • 计划内未验证:真实摄像头、ONVIF/RTSP 连通及目标客户浏览器,属于后续 #66 与现场验收。

人工验收

  • 2026-08-14 用户明确回复“#65 验收通过”。
## 状态 已完成 ## 基本信息 - 类型:需求 / 新 GoAdmin 基线重建 - 任务类型:单项目独立任务 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP:#8 - 前置工单:#64 - 是否允许与前置工单并行:否 - 原因:设备 API、页面和审计必须复用已成立的 Sense 身份与权限边界。 - 独立运行:Brain、Bell 均不启动时完成实现和验收 ## 原始需求与追溯 - 来源:用户于 2026-08-14 要求先建立 Sense 全部独立任务工单;Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix。 - 需求摘要:在 #61 冻结 GoAdmin/go-admin-ui 源码派生骨架上,重新实现 Sense 独立纵切;旧 `explore` 只用于业务、测试和故障证据,不复制自研基础框架。 - 历史对照:#23、#50、#56 及旧凭据隔离证据,只提取业务约束和测试用例。 ## 目标 以 Device 为根实体重建设备台账,表达 modality/capabilities,并建立摄像头凭据只写不读、分用途隔离和审计边界。 ## 做什么 实现设备列表、新建、编辑、停用、版本并发控制和能力状态;首期完整支持 video,未实现适配器显示 adapter_not_ready;凭据加密存储、更新触发重试且不回显。 ## 不做什么 不连接 ONVIF/RTSP;不创建媒体路径;不在 URL、日志、响应、工单或测试夹具中保存真实凭据;不共享用户或数据库模型。 ## GoAdmin 复用与文档门禁 - 必须沿用 #61 建立的 Cobra、Gin、GORM、Casbin、JWT、迁移、Router、Store、Axios、Layout 和权限链。 - 优先复用 go-admin-ui 的页面容器、搜索栏、表格、表单、分页、Dialog、Tag、权限按钮和反馈组件。 - 冻结 go-admin-doc 必查:`models.md`、`dto.md`、`service.md`、`db.md`、`api.md`,以及 go-admin-ui 表格、表单、Dialog、权限按钮实现。 - 在工单评论记录实际阅读文件、采用方式及无法复用而新增的业务组件。 - 不永久删除默认模块;无关能力采用菜单、路由、权限和后端访问同时禁用。 ## 写路径 - `Sense/server/app/sense/device/**` - `Sense/server/app/sense/credential/**` - `Sense/server/cmd/migrate/migration/version/*device*` - `Sense/server/cmd/migrate/migration/version/*credential*` - `Sense/server/app/admin/router/sense_device.go` - `Sense/server/common/middleware/logger.go` - `Sense/server/common/middleware/logger_test.go` - `Sense/server/config/credential.env.example` - `Sense/README.md` - `Sense/ui/src/views/sense/device/**` - `Sense/ui/src/api/sense/device*` - `Sense/ui/src/components/sense/credential/**` - `Sense/server/app/sense/device/**/*_test.go` - `Sense/server/app/sense/credential/**/*_test.go` - `Sense/ui/tests/unit/sense/device*.spec.js` 禁止写入:`Brain/**`、`Bell/**`、`contracts/**`、根级部署配置、`docs/**`、`wiki-docs.json`。如实现发现必须修改这些路径,停止并转协同工单。 ## 文档影响 更新设备模型、能力语义、凭据边界、字段白名单和管理员操作入口。 长期文档先更新 Gitea Wiki;本地 `docs/` 镜像由单一协调工单同步,避免共享路径冲突。 ## 验收标准 - [x] 设备 CRUD、停用和乐观并发在 PostgreSQL 上成立 - [x] video 外的未实现 modality 明确显示 adapter_not_ready - [x] 摄像头密码只写不读、不回显、不进日志和 URL - [x] 中文名称与安装位置可保存、编辑和回读 - [x] 新建与编辑使用显式请求字段白名单 - [x] 权限与审计覆盖设备和凭据写操作 ## 验证方式 - Go 模型、服务、权限、加密与 PostgreSQL 集成测试 - 前端 payload、中文字段、表格/表单/分页测试和 build - 日志与 API 响应秘密扫描 - Brain/Bell 不启动的设备台账 smoke ## 风险与回退 凭据泄漏和并发覆盖属于高风险。仅使用合成秘密测试;回退迁移和任务分支,不接触生产设备数据。 ## 协同需求摘要 本工单不建立跨项目契约。发现 Sense→Brain 源/区域配置或 Sense/Brain→Bell 事件/证据需求时,只记录生产者、消费者、目的与建议验证,不取得共享写路径。 ## 实施结果(2026-08-14) - 实现提交:`be091f0`;长期文档提交:`d31c35f`;待验收归档提交:`f7eab5d`。 - PR:#83 已合入 `dev`,merge commit `5856b76de993f074a2480a16d85ba578e7209b0e`;未合入 `main`。 - Wiki 归档:`Task-65-Sense设备台账与凭据边界`,验收 revision `9864d7fece44ca2e88ee8c3661101e3d6f74b030`;镜像提交 `3e859c3`。 - 计划内未验证:真实摄像头、ONVIF/RTSP 连通及目标客户浏览器,属于后续 #66 与现场验收。 ## 人工验收 - 2026-08-14 用户明确回复“#65 验收通过”。
ila added the kind/taskproject/sensescope/independentpriority/p0 labels 2026-08-14 10:26:39 +08:00
Author
Owner

实施开始(2026-08-14)

  • 分支:feature/65-sense-device-credential
  • 前置:#64 已验收关闭,PR #82 已合并到 dev。
  • 路径校正:冻结 GoAdmin 的迁移入口实际为 Sense/server/cmd/migrate/migration/version/;业务路由需通过 Sense/server/app/admin/router/sense_device.go 接入既有 JWT/Casbin/操作审计链;测试沿源码包与现有 Jest 目录放置。上述精确路径已更新到工单,不改变目标、数据边界或验收标准。
  • 已阅读冻结 go-admin-doc:models.md、dto.md、service.md、db.md、api.md,采用 Model/DTO 白名单/Service/GORM/API 分层与 PostgreSQL 迁移方式。
  • 已核对 go-admin-ui:src/views/admin/sys-post/index.vue、src/api/admin/sys-post.js、src/store/modules/permission.js 及 v-permisaction 测试,复用 BasicLayout、搜索表单、表格、分页、Dialog、Tag、权限按钮、Axios 与动态菜单。
  • 旧 explore 仅提取 Device/modality/capabilities、中文字段、乐观并发、ONVIF/RTSP 凭据分用途、只写不读和 payload 白名单验收语义;不复制旧 HTTP、身份、数据库或前端外壳。

下一步按更新后的单一写路径实施。

## 实施开始(2026-08-14) - 分支:`feature/65-sense-device-credential` - 前置:#64 已验收关闭,PR #82 已合并到 `dev`。 - 路径校正:冻结 GoAdmin 的迁移入口实际为 `Sense/server/cmd/migrate/migration/version/`;业务路由需通过 `Sense/server/app/admin/router/sense_device.go` 接入既有 JWT/Casbin/操作审计链;测试沿源码包与现有 Jest 目录放置。上述精确路径已更新到工单,不改变目标、数据边界或验收标准。 - 已阅读冻结 go-admin-doc:`models.md`、`dto.md`、`service.md`、`db.md`、`api.md`,采用 Model/DTO 白名单/Service/GORM/API 分层与 PostgreSQL 迁移方式。 - 已核对 go-admin-ui:`src/views/admin/sys-post/index.vue`、`src/api/admin/sys-post.js`、`src/store/modules/permission.js` 及 `v-permisaction` 测试,复用 BasicLayout、搜索表单、表格、分页、Dialog、Tag、权限按钮、Axios 与动态菜单。 - 旧 `explore` 仅提取 Device/modality/capabilities、中文字段、乐观并发、ONVIF/RTSP 凭据分用途、只写不读和 payload 白名单验收语义;不复制旧 HTTP、身份、数据库或前端外壳。 下一步按更新后的单一写路径实施。
Author
Owner

安全范围补充:现有通用操作审计会读取 JSON 正文,虽已隐藏 password,但不会隐藏 onvifUsername / rtspUsername 等复合凭据字段。为满足“摄像头凭据不进日志”,将仅扩充 common/middleware/logger.go 的敏感字段白名单及对应测试;不改变非凭据路由行为。该精确路径已加入工单。

安全范围补充:现有通用操作审计会读取 JSON 正文,虽已隐藏 `password`,但不会隐藏 `onvifUsername` / `rtspUsername` 等复合凭据字段。为满足“摄像头凭据不进日志”,将仅扩充 `common/middleware/logger.go` 的敏感字段白名单及对应测试;不改变非凭据路由行为。该精确路径已加入工单。
Author
Owner

待验收证据

  • 后端:go test ./...、go vet ./...、go build ./... 全部通过。
  • 前端:frozen install 通过;lint 0 error(30 条继承 warning);8 suites / 32 tests 通过;生产构建通过(6 条继承 warning)。
  • PostgreSQL 17:迁移及重复迁移通过;最终 HTTP 集成状态为 bootstrap 200、未知字段 400、创建 200、更新 200、过期写入 409、凭据 200、viewer 读取 200、viewer 写入 403。
  • 安全证据:ONVIF/RTSP 两类记录均为密文,响应不含凭据字段,操作审计中合成秘密匹配 0;临时数据库、日志、二进制、node_modules 和 dist 已清理。
  • Wiki 四个长期页面及任务归档已回读;sync_wiki_docs.py --check 通过。
  • 提交:be091f0、d31c35f、f7eab5d;PR #83:#83

当前保持“待验收”且工单不关闭。用户验收后再合入 dev、关闭工单并同步 #8/#7;不会合入 main。

## 待验收证据 - 后端:`go test ./...`、`go vet ./...`、`go build ./...` 全部通过。 - 前端:frozen install 通过;lint 0 error(30 条继承 warning);8 suites / 32 tests 通过;生产构建通过(6 条继承 warning)。 - PostgreSQL 17:迁移及重复迁移通过;最终 HTTP 集成状态为 bootstrap 200、未知字段 400、创建 200、更新 200、过期写入 409、凭据 200、viewer 读取 200、viewer 写入 403。 - 安全证据:ONVIF/RTSP 两类记录均为密文,响应不含凭据字段,操作审计中合成秘密匹配 0;临时数据库、日志、二进制、node_modules 和 dist 已清理。 - Wiki 四个长期页面及任务归档已回读;`sync_wiki_docs.py --check` 通过。 - 提交:`be091f0`、`d31c35f`、`f7eab5d`;PR #83:https://git.ilapage.cn/ila/yovision/pulls/83 当前保持“待验收”且工单不关闭。用户验收后再合入 `dev`、关闭工单并同步 #8/#7;不会合入 `main`。
ila closed this issue 2026-08-14 16:28:00 +08:00
Author
Owner

用户已于 2026-08-14 明确验收通过。PR #83 已合入 dev,merge commit 5856b76de993f074a2480a16d85ba578e7209b0e;验收归档 Wiki revision 9864d7fece44,镜像提交 3e859c3。工单关闭,未合入 main。

用户已于 2026-08-14 明确验收通过。PR #83 已合入 `dev`,merge commit `5856b76de993f074a2480a16d85ba578e7209b0e`;验收归档 Wiki revision `9864d7fece44`,镜像提交 `3e859c3`。工单关闭,未合入 `main`。
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#65