[SEN] 实现 Sense 独立登录、RBAC 与审计 #22

Closed
opened 2026-08-12 09:54:02 +08:00 by ila · 5 comments
Owner

当前状态:已完成

用户于 2026-08-14 明确验收通过。

基本信息

  • 类型:需求
  • 任务类型:单项目
  • 主项目:Sense
  • 主 agent:Sense agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#8
  • 阶段:阶段 1(三条独立纵切)

依赖与并行

  • 前置工单:#21
  • 是否允许与前置工单并行:否
  • 原因:必须在 Sense 骨架、独立数据库和模块注册边界稳定后实施认证与权限。

子项目影响

  • 仅影响的子项目 / 交付单元:Sense
  • 是否跨子项目:否
  • 是否修改共享接口或契约:否;唯一事实来源:Sense 项目内部模型、端口和夹具
  • write_paths:
    • Sense/server/app/sense/identity/
    • Sense/server/database/migrations/sense_identity/
    • Sense/ui/src/api/sense/identity/
    • Sense/ui/src/views/sense/identity/
    • Sense/ui/src/router/modules/sense-identity.js
    • Sense/ui/src/store/modules/sense-identity.js
    • Sense/tests/identity/
  • 各子项目需要执行的验证:仅 Sense 执行本工单“验证方式”;Brain、Bell 无需启动或验证

协同接口

  • 生产者:不适用
  • 消费者:不适用
  • 契约/共享事实源:不适用;跨端数据只预留 Sense 内部适配器端口,不在本工单冻结共享结构
  • 兼容策略:不适用
  • 被阻塞或需要适配的工单:不适用
  • 集成顺序:不适用

原始需求

  • 来源:用户对话
  • 提出时间:2026-08-12
  • 关键原话或脱敏摘要:先创建三个项目全部独立 MVP 工单,标题带项目英文简称;独立任务不依赖其他项目在线,按 MVP 和真实依赖推进。

要解决什么

Sense 需要自己的账户、角色、菜单、会话与审计,且不能接受 Bell 身份。目标是建立最小可用的独立认证/RBAC,覆盖管理员、实施/运维、站点管理员和只读边界。

做什么 / 不做什么

  • 做:
    • 实现 Sense 自有用户、角色、菜单、会话、密码策略和关键操作审计。
    • 定义四类最小角色权限矩阵,并覆盖 API 与菜单/路由授权。
    • 移除或禁用上游演示账户、默认密码、默认 JWT secret 和无关管理入口。
    • 增加认证、越权、会话失效和审计的自动化测试。
  • 不做:
    • 不共享 Bell 用户、JWT、Cookie、Casbin 策略或数据库角色。
    • 不实现跨产品单点登录、机器身份或设备业务。
    • 不修改上游冻结基线和底层公共组件的全局行为。

已确认方案

  • 认证数据仅进入 Sense 独立 PostgreSQL schema/数据库边界。
  • 密码只存强哈希;密钥来自仓库外环境,启动时拒绝不安全默认值。
  • 后端权限是最终安全边界,前端菜单/路由只承担可见性控制。
  • 审计记录登录成功/失败、用户和权限变更,不记录密码、token 或 Cookie。

预计修改文件:

  • Sense/server/app/sense/identity/
  • Sense/server/database/migrations/sense_identity/
  • Sense/ui/src/api/sense/identity/
  • Sense/ui/src/views/sense/identity/
  • Sense/ui/src/router/modules/sense-identity.js
  • Sense/ui/src/store/modules/sense-identity.js
  • Sense/tests/identity/

需求变化记录

日期 变化内容 原因 用户确认
2026-08-12 将 Sense 首个纵切按骨架、认证、设备、接入、媒体、监看、区域拆为独立单元工单 支持三个项目并行并按真实内部依赖实施 是

文档影响

  • 不影响长期文档,原因:不适用
  • 更新项目档案或本地开发与验证
  • 更新架构与代码地图
  • 更新业务规则与术语
  • 更新常见修改或故障排查
  • 更新其他 Wiki 页面:Sense 认证边界、角色权限矩阵、密钥配置与审计入口

交付文档影响

  • 无交付文档影响,原因:不适用
  • 更新已有交付文档,受众与页面:管理员/实施人员,首次安全初始化、用户角色和登录排错
  • 新增交付文档,受众与页面:
  • 需要目标岗位或客户代表验证:是;验证方式:用四类测试账户核对菜单、API、越权提示和审计结果

验收标准

  • Sense 账户可以登录 Sense;无效凭据返回统一安全错误且不泄漏账户存在性。
  • 四类角色只能访问各自授权菜单和 API,直接请求未授权 API 被后端拒绝。
  • Sense 不接受 Bell token/Cookie,Cookie 名称与作用域不形成跨产品会话。
  • 默认/演示凭据和不安全 secret 不可用于启动,敏感值不出现在日志和响应。
  • Brain、Bell 未启动时可完成登录、权限和审计测试。

验证方式

cd Sense\server
go test ./app/sense/identity/...
go test ./...
cd ..\ui
pnpm lint
pnpm build
cd ..
go test ./tests/identity/...

除命令验证外,按验收标准执行 Sense 独立人工检查;Brain、Bell 保持未启动。若所需实验室摄像头或 MediaMTX 二进制不可用,必须明确记录未验证边界,不得用模拟结果冒充真机结果。

风险和回退

高风险点是认证、权限和秘密管理。实施前复核迁移与默认账户;不得对生产用户做破坏性迁移。回退:回退身份模块和对应未投产迁移;若已产生测试数据,仅删除明确标识的测试数据库,不自动处理生产数据。

## 当前状态:已完成 用户于 2026-08-14 明确验收通过。 ## 基本信息 - 类型:需求 - 任务类型:单项目 - 主项目:Sense - 主 agent:Sense agent - 所属 Epic:#7 - 所属 MVP / 版本:#8 - 阶段:阶段 1(三条独立纵切) ## 依赖与并行 - 前置工单:#21 - 是否允许与前置工单并行:否 - 原因:必须在 Sense 骨架、独立数据库和模块注册边界稳定后实施认证与权限。 ## 子项目影响 - 仅影响的子项目 / 交付单元:Sense - 是否跨子项目:否 - 是否修改共享接口或契约:否;唯一事实来源:Sense 项目内部模型、端口和夹具 - write_paths: - `Sense/server/app/sense/identity/` - `Sense/server/database/migrations/sense_identity/` - `Sense/ui/src/api/sense/identity/` - `Sense/ui/src/views/sense/identity/` - `Sense/ui/src/router/modules/sense-identity.js` - `Sense/ui/src/store/modules/sense-identity.js` - `Sense/tests/identity/` - 各子项目需要执行的验证:仅 Sense 执行本工单“验证方式”;Brain、Bell 无需启动或验证 ## 协同接口 - 生产者:不适用 - 消费者:不适用 - 契约/共享事实源:不适用;跨端数据只预留 Sense 内部适配器端口,不在本工单冻结共享结构 - 兼容策略:不适用 - 被阻塞或需要适配的工单:不适用 - 集成顺序:不适用 ## 原始需求 - 来源:用户对话 - 提出时间:2026-08-12 - 关键原话或脱敏摘要:先创建三个项目全部独立 MVP 工单,标题带项目英文简称;独立任务不依赖其他项目在线,按 MVP 和真实依赖推进。 ## 要解决什么 Sense 需要自己的账户、角色、菜单、会话与审计,且不能接受 Bell 身份。目标是建立最小可用的独立认证/RBAC,覆盖管理员、实施/运维、站点管理员和只读边界。 ## 做什么 / 不做什么 - 做: - 实现 Sense 自有用户、角色、菜单、会话、密码策略和关键操作审计。 - 定义四类最小角色权限矩阵,并覆盖 API 与菜单/路由授权。 - 移除或禁用上游演示账户、默认密码、默认 JWT secret 和无关管理入口。 - 增加认证、越权、会话失效和审计的自动化测试。 - 不做: - 不共享 Bell 用户、JWT、Cookie、Casbin 策略或数据库角色。 - 不实现跨产品单点登录、机器身份或设备业务。 - 不修改上游冻结基线和底层公共组件的全局行为。 ## 已确认方案 - 认证数据仅进入 Sense 独立 PostgreSQL schema/数据库边界。 - 密码只存强哈希;密钥来自仓库外环境,启动时拒绝不安全默认值。 - 后端权限是最终安全边界,前端菜单/路由只承担可见性控制。 - 审计记录登录成功/失败、用户和权限变更,不记录密码、token 或 Cookie。 预计修改文件: - `Sense/server/app/sense/identity/` - `Sense/server/database/migrations/sense_identity/` - `Sense/ui/src/api/sense/identity/` - `Sense/ui/src/views/sense/identity/` - `Sense/ui/src/router/modules/sense-identity.js` - `Sense/ui/src/store/modules/sense-identity.js` - `Sense/tests/identity/` ## 需求变化记录 | 日期 | 变化内容 | 原因 | 用户确认 | |---|---|---|---| | 2026-08-12 | 将 Sense 首个纵切按骨架、认证、设备、接入、媒体、监看、区域拆为独立单元工单 | 支持三个项目并行并按真实内部依赖实施 | 是 | ## 文档影响 - [ ] 不影响长期文档,原因:不适用 - [x] 更新项目档案或本地开发与验证 - [x] 更新架构与代码地图 - [x] 更新业务规则与术语 - [x] 更新常见修改或故障排查 - [x] 更新其他 Wiki 页面:Sense 认证边界、角色权限矩阵、密钥配置与审计入口 ## 交付文档影响 - [ ] 无交付文档影响,原因:不适用 - [x] 更新已有交付文档,受众与页面:管理员/实施人员,首次安全初始化、用户角色和登录排错 - [ ] 新增交付文档,受众与页面: - [x] 需要目标岗位或客户代表验证:是;验证方式:用四类测试账户核对菜单、API、越权提示和审计结果 ## 验收标准 - [ ] Sense 账户可以登录 Sense;无效凭据返回统一安全错误且不泄漏账户存在性。 - [ ] 四类角色只能访问各自授权菜单和 API,直接请求未授权 API 被后端拒绝。 - [ ] Sense 不接受 Bell token/Cookie,Cookie 名称与作用域不形成跨产品会话。 - [ ] 默认/演示凭据和不安全 secret 不可用于启动,敏感值不出现在日志和响应。 - [ ] Brain、Bell 未启动时可完成登录、权限和审计测试。 ## 验证方式 ```powershell cd Sense\server go test ./app/sense/identity/... go test ./... cd ..\ui pnpm lint pnpm build cd .. go test ./tests/identity/... ``` 除命令验证外,按验收标准执行 Sense 独立人工检查;Brain、Bell 保持未启动。若所需实验室摄像头或 MediaMTX 二进制不可用,必须明确记录未验证边界,不得用模拟结果冒充真机结果。 ## 风险和回退 高风险点是认证、权限和秘密管理。实施前复核迁移与默认账户;不得对生产用户做破坏性迁移。回退:回退身份模块和对应未投产迁移;若已产生测试数据,仅删除明确标识的测试数据库,不自动处理生产数据。
ila added the kind/taskpriority/p0project/sensescope/independent labels 2026-08-12 09:58:25 +08:00
Author
Owner

状态:进行中(2026-08-12)

前置 #21 已完成实现、验证与待验收归档。为使用 #21 已确认的独立模块注册约定,新增精确 write_path:Sense/server/cmd/sense/modules_identity.go;该文件仅负责把 identity 模块挂载到 Sense 进程,不修改共享入口。变化不改变认证方案、数据边界或验收标准。

## 状态:进行中(2026-08-12) 前置 #21 已完成实现、验证与待验收归档。为使用 #21 已确认的独立模块注册约定,新增精确 write_path:`Sense/server/cmd/sense/modules_identity.go`;该文件仅负责把 identity 模块挂载到 Sense 进程,不修改共享入口。变化不改变认证方案、数据边界或验收标准。
Author
Owner

UI 集成范围澄清(2026-08-12)

新增精确 write_path:Sense/ui/src/layout/AppLayout.vue。原因:#22 必须让公共应用外壳按 Sense 权限隐藏菜单,并让顶部“退出登录”调用后端撤销会话,而不能只清理浏览器状态。仅修改这两个身份相关集成点,不改变底层公共组件视觉或其他项目。

## UI 集成范围澄清(2026-08-12) 新增精确 write_path:`Sense/ui/src/layout/AppLayout.vue`。原因:#22 必须让公共应用外壳按 Sense 权限隐藏菜单,并让顶部“退出登录”调用后端撤销会话,而不能只清理浏览器状态。仅修改这两个身份相关集成点,不改变底层公共组件视觉或其他项目。
Author
Owner

安全边界范围澄清(2026-08-12)

新增精确 write_path:Sense/server/internal/platform/http.go。#22 的认证请求复用 #21 JSON 解码器时发现其大小限制调用传入空 ResponseWriter;超大请求可能触发标准库对空 writer 的访问。将改为安全的有限 Reader 并拒绝尾随 JSON,仅影响请求解码安全,不改变 API 结构。

## 安全边界范围澄清(2026-08-12) 新增精确 write_path:`Sense/server/internal/platform/http.go`。#22 的认证请求复用 #21 JSON 解码器时发现其大小限制调用传入空 ResponseWriter;超大请求可能触发标准库对空 writer 的访问。将改为安全的有限 Reader 并拒绝尾随 JSON,仅影响请求解码安全,不改变 API 结构。
ila referenced this issue from a commit 2026-08-12 17:48:54 +08:00
Author
Owner

状态:待验收

  • 实现提交:b9416eb
  • 汇总文档提交:5177861
  • 最终归档提交:6d90d54(#21 的首次归档提交另为 2c0e37e)
  • 分支:agent/codex/21-sense-mvp
  • Pull Request:#34
  • Wiki 归档:Task-22-Sense独立登录RBAC与审计
  • Wiki revision:7a6afe93812e(短哈希)

最终全量验证:Go 1.26.5 vet、全包 race、非缓存测试、build;pnpm 9.15.1 冻结安装、lint、build;Sense 独立 smoke;Harness strict 与 31 项测试;Wiki 镜像一致性;git diff --check,全部通过。前端仅有 vendor bundle 体积建议警告。

未验证部分:未验证真实 PostgreSQL 及四类部署账户浏览器走查。

工单保持 open,等待用户验收;未关闭、未代替用户确认真实环境结果。

## 状态:待验收 - 实现提交:`b9416eb` - 汇总文档提交:`5177861` - 最终归档提交:`6d90d54`(#21 的首次归档提交另为 `2c0e37e`) - 分支:`agent/codex/21-sense-mvp` - Pull Request:https://git.ilapage.cn/ila/yovision/pulls/34 - Wiki 归档:`Task-22-Sense独立登录RBAC与审计` - Wiki revision:`7a6afe93812e`(短哈希) 最终全量验证:Go 1.26.5 vet、全包 race、非缓存测试、build;pnpm 9.15.1 冻结安装、lint、build;Sense 独立 smoke;Harness strict 与 31 项测试;Wiki 镜像一致性;`git diff --check`,全部通过。前端仅有 vendor bundle 体积建议警告。 **未验证部分**:未验证真实 PostgreSQL 及四类部署账户浏览器走查。 工单保持 open,等待用户验收;未关闭、未代替用户确认真实环境结果。
Author
Owner

用户验收通过(2026-08-14)

用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision 9328787c74df)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 explore 追溯。

此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 dev 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。

## 用户验收通过(2026-08-14) 用户已明确确认当前未验收工单通过验收。本工单的实现、测试与既有证据按记录接受,Wiki 归档状态已更新为“已完成”(revision `9328787c74df`)。该交付属于重建前历史实现;Wiki 归档已完成,代码与原归档镜像继续保留在 `explore` 追溯。 此验收不改变 #58 的架构决定:旧自研基础框架不会恢复为 `dev` 基线,Sense/Bell 后续仍分别由 #61/#62 从冻结 GoAdmin 源码重建。
ila closed this issue 2026-08-14 10:06:45 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ila/yovision#22