[BEL] 实现独立登录、RBAC 与认证审计 #12

Closed
opened 2026-08-12 09:53:40 +08:00 by ila · 4 comments
Owner

当前状态:已完成

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

基本信息

  • 类型:需求
  • 任务类型:单项目
  • 主项目:Bell
  • 主 agent:Bell agent
  • 所属 Epic:#7
  • 所属 MVP / 版本:#8
  • 阶段:三项目首个独立纵切

依赖与并行

  • 前置工单:#9
  • 是否允许与前置工单并行:否
  • 原因:认证、菜单和审计必须建立在已可运行的 Bell 独立骨架与数据库迁移入口上。

子项目影响

  • 仅影响的子项目 / 交付单元:Bell
  • 是否跨子项目:否
  • 是否修改共享接口或契约:否;唯一事实来源:不适用,本工单只维护 Bell 内部实现
  • write_paths:Bell/server/app/auth/**、Bell/server/app/rbac/**、Bell/server/app/audit/**、Bell/server/migrations/*auth*、Bell/web/src/views/login/**、Bell/web/src/views/system/**、Bell/web/src/router/**、Bell/web/src/store/**
  • 各子项目需要执行的验证:仅执行 Bell 后端、前端及 PostgreSQL 测试;Sense/Brain 无需启动或验证

协同接口

  • 生产者:不适用
  • 消费者:不适用
  • 契约/共享事实源:不适用
  • 兼容策略:不适用
  • 被阻塞或需要适配的工单:不适用
  • 集成顺序:不适用

原始需求

  • 来源:用户对话、Epic #7、MVP #8、Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix
  • 提出时间:2026-08-12
  • 关键原话或脱敏摘要:先创建三个项目各自独立任务的全部工单,标题包含项目英文简称;Bell 首个纵切须在 Sense/Brain 不在线时以合成事件完成 Event → Alert → ack → close。

要解决什么

Bell 必须拥有不依赖 Sense 的独立账户、角色、会话、密码策略、菜单权限和认证审计,并明确拒绝 Sense token。需要形成可见且安全的管理员登录纵切。

做什么 / 不做什么

  • 做:建立 Bell 自有用户/RBAC/会话/密码策略;最小角色边界至少覆盖管理员、处置员和只读;记录登录成功/失败及权限变更审计;提供登录页、用户/角色必要管理入口和权限测试。
  • 不做:不接入 Sense 账户、JWT、Cookie、Casbin 策略或数据库;不实现 SSO、第三方身份源、通知联系人/排班;不修改全局公共组件行为。

已确认方案

复用 go-admin 的认证、权限、布局、表格和表单能力并按 Bell 边界裁剪。Bell 使用独立密钥和 Cookie 命名/作用域;初始化不得带生产可用默认密码,启动配置缺少安全秘密时明确失败。审计事实仅追加。

预计修改文件:

  • Bell/server/app/auth/**
  • Bell/server/app/rbac/**
  • Bell/server/app/audit/**
  • Bell/server/migrations/*auth*
  • Bell/web/src/views/login/**
  • Bell/web/src/views/system/**
  • Bell/web/src/router/**
  • Bell/web/src/store/**

需求变化记录

日期 变化内容 原因 用户确认
2026-08-12 无 初始建单 是

文档影响

  • 不影响长期文档,原因:不适用
  • 更新项目档案或本地开发与验证
  • 更新架构与代码地图
  • 更新业务规则与术语
  • 更新常见修改或故障排查
  • 更新其他 Wiki 页面:Bell 账户、角色、会话、密码和审计安全边界

交付文档影响

  • 无交付文档影响,原因:不适用
  • 更新已有交付文档,受众与页面:Bell 管理员,账户与角色配置说明
  • 新增交付文档,受众与页面:
  • 需要目标岗位或客户代表验证:是;验证方式:管理员、处置员、只读角色逐项核对菜单与禁止操作

验收标准

  • Sense/Brain 不启动时 Bell 可独立登录、退出并恢复合法会话
  • Bell 账号、角色、会话、密钥和 Cookie 与 Sense 完全独立,伪造或提供 Sense token 不能登录 Bell
  • 管理员、处置员、只读角色具有最小且可测试的菜单/API 权限
  • 密码策略、登录失败和权限变更产生不含秘密的审计记录
  • 无演示账户、默认密码、固定 JWT secret、可越权路由或只隐藏菜单但可调用的接口
  • 页面复用现有组件且无多余、失效或重复入口

验证方式

Set-Location Bell/server
go test ./...
Set-Location ../web
pnpm lint
pnpm build:prod

使用 Bell 测试账户执行登录/退出、失效会话、角色矩阵、API 越权、Sense token 拒绝和审计内容集成测试。

未验证边界:Sense/Brain 的正式事件生产、跨项目机器身份、共享事件/证据契约、根级部署与端到端链路不在本工单验证;这些内容留待独立协同工单。

风险和回退

风险:认证与权限配置错误会产生越权或锁死管理员。回退:回退本工单迁移和认证/菜单配置,恢复到骨架健康检查态;不得复用 Sense 凭据作为临时回退。

后续协同需求摘要

不适用。

## 当前状态:已完成 用户于 2026-08-14 明确验收通过。 ## 基本信息 - 类型:需求 - 任务类型:单项目 - 主项目:Bell - 主 agent:Bell agent - 所属 Epic:#7 - 所属 MVP / 版本:#8 - 阶段:三项目首个独立纵切 ## 依赖与并行 - 前置工单:#9 - 是否允许与前置工单并行:否 - 原因:认证、菜单和审计必须建立在已可运行的 Bell 独立骨架与数据库迁移入口上。 ## 子项目影响 - 仅影响的子项目 / 交付单元:Bell - 是否跨子项目:否 - 是否修改共享接口或契约:否;唯一事实来源:不适用,本工单只维护 Bell 内部实现 - write_paths:`Bell/server/app/auth/**`、`Bell/server/app/rbac/**`、`Bell/server/app/audit/**`、`Bell/server/migrations/*auth*`、`Bell/web/src/views/login/**`、`Bell/web/src/views/system/**`、`Bell/web/src/router/**`、`Bell/web/src/store/**` - 各子项目需要执行的验证:仅执行 Bell 后端、前端及 PostgreSQL 测试;Sense/Brain 无需启动或验证 ## 协同接口 - 生产者:不适用 - 消费者:不适用 - 契约/共享事实源:不适用 - 兼容策略:不适用 - 被阻塞或需要适配的工单:不适用 - 集成顺序:不适用 ## 原始需求 - 来源:用户对话、Epic #7、MVP #8、Product-Requirements、Product-Roadmap、Requirements-Migration-Matrix - 提出时间:2026-08-12 - 关键原话或脱敏摘要:先创建三个项目各自独立任务的全部工单,标题包含项目英文简称;Bell 首个纵切须在 Sense/Brain 不在线时以合成事件完成 Event → Alert → ack → close。 ## 要解决什么 Bell 必须拥有不依赖 Sense 的独立账户、角色、会话、密码策略、菜单权限和认证审计,并明确拒绝 Sense token。需要形成可见且安全的管理员登录纵切。 ## 做什么 / 不做什么 - 做:建立 Bell 自有用户/RBAC/会话/密码策略;最小角色边界至少覆盖管理员、处置员和只读;记录登录成功/失败及权限变更审计;提供登录页、用户/角色必要管理入口和权限测试。 - 不做:不接入 Sense 账户、JWT、Cookie、Casbin 策略或数据库;不实现 SSO、第三方身份源、通知联系人/排班;不修改全局公共组件行为。 ## 已确认方案 复用 go-admin 的认证、权限、布局、表格和表单能力并按 Bell 边界裁剪。Bell 使用独立密钥和 Cookie 命名/作用域;初始化不得带生产可用默认密码,启动配置缺少安全秘密时明确失败。审计事实仅追加。 预计修改文件: - `Bell/server/app/auth/**` - `Bell/server/app/rbac/**` - `Bell/server/app/audit/**` - `Bell/server/migrations/*auth*` - `Bell/web/src/views/login/**` - `Bell/web/src/views/system/**` - `Bell/web/src/router/**` - `Bell/web/src/store/**` ## 需求变化记录 | 日期 | 变化内容 | 原因 | 用户确认 | |---|---|---|---| | 2026-08-12 | 无 | 初始建单 | 是 | ## 文档影响 - [ ] 不影响长期文档,原因:不适用 - [ ] 更新项目档案或本地开发与验证 - [x] 更新架构与代码地图 - [x] 更新业务规则与术语 - [x] 更新常见修改或故障排查 - [x] 更新其他 Wiki 页面:Bell 账户、角色、会话、密码和审计安全边界 ## 交付文档影响 - [ ] 无交付文档影响,原因:不适用 - [x] 更新已有交付文档,受众与页面:Bell 管理员,账户与角色配置说明 - [ ] 新增交付文档,受众与页面: - [x] 需要目标岗位或客户代表验证:是;验证方式:管理员、处置员、只读角色逐项核对菜单与禁止操作 ## 验收标准 - [ ] Sense/Brain 不启动时 Bell 可独立登录、退出并恢复合法会话 - [ ] Bell 账号、角色、会话、密钥和 Cookie 与 Sense 完全独立,伪造或提供 Sense token 不能登录 Bell - [ ] 管理员、处置员、只读角色具有最小且可测试的菜单/API 权限 - [ ] 密码策略、登录失败和权限变更产生不含秘密的审计记录 - [ ] 无演示账户、默认密码、固定 JWT secret、可越权路由或只隐藏菜单但可调用的接口 - [ ] 页面复用现有组件且无多余、失效或重复入口 ## 验证方式 ```powershell Set-Location Bell/server go test ./... Set-Location ../web pnpm lint pnpm build:prod ``` 使用 Bell 测试账户执行登录/退出、失效会话、角色矩阵、API 越权、Sense token 拒绝和审计内容集成测试。 未验证边界:Sense/Brain 的正式事件生产、跨项目机器身份、共享事件/证据契约、根级部署与端到端链路不在本工单验证;这些内容留待独立协同工单。 ## 风险和回退 风险:认证与权限配置错误会产生越权或锁死管理员。回退:回退本工单迁移和认证/菜单配置,恢复到骨架健康检查态;不得复用 Sense 凭据作为临时回退。 ## 后续协同需求摘要 不适用。
ila added the kind/taskpriority/p0project/bellscope/independent labels 2026-08-12 09:58:43 +08:00
Author
Owner

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

前置 #9 已形成可运行、已测试并推送的提交 a5d846a,数据库迁移与健康检查均通过,真实技术依赖已满足。开始实现 Bell 独立登录、三角色最小权限、独立会话 Cookie、缺失秘密启动失败和仅追加认证审计;写入限于工单声明的 Bell/** 路径。

## 状态:进行中(2026-08-12) 前置 #9 已形成可运行、已测试并推送的提交 `a5d846a`,数据库迁移与健康检查均通过,真实技术依赖已满足。开始实现 Bell 独立登录、三角色最小权限、独立会话 Cookie、缺失秘密启动失败和仅追加认证审计;写入限于工单声明的 `Bell/**` 路径。
Author
Owner

实施完成,进入连续依赖验证

  • 实现提交:a5fc8f5(已推送)
  • 缺失 BELL_SESSION_SECRET:启动明确失败
  • 独立 Bell 登录/会话恢复/退出:200 → 204 → 401
  • 伪造 Sense Cookie:401
  • 管理员读取用户:200;处置员读取用户:403;只读用户读取审计:403
  • 三角色创建与最小权限矩阵:实际 PostgreSQL 验证通过
  • 审计 UPDATE:数据库触发器拒绝,确认仅追加
  • Go 测试、前端 lint/build、Harness、31 项仓库测试、差异检查:通过
  • 无默认用户、默认密码或固定生产秘密

#17 允许在 #9 后实施且与 #12 写路径不重叠;当前 #12 已完成并提交,因此继续按顺序实施 #17。

## 实施完成,进入连续依赖验证 - 实现提交:`a5fc8f5`(已推送) - 缺失 `BELL_SESSION_SECRET`:启动明确失败 - 独立 Bell 登录/会话恢复/退出:200 → 204 → 401 - 伪造 Sense Cookie:401 - 管理员读取用户:200;处置员读取用户:403;只读用户读取审计:403 - 三角色创建与最小权限矩阵:实际 PostgreSQL 验证通过 - 审计 UPDATE:数据库触发器拒绝,确认仅追加 - Go 测试、前端 lint/build、Harness、31 项仓库测试、差异检查:通过 - 无默认用户、默认密码或固定生产秘密 #17 允许在 #9 后实施且与 #12 写路径不重叠;当前 #12 已完成并提交,因此继续按顺序实施 #17。
Author
Owner

最终证据:待验收

  • 实现提交:a5fc8f5(PR #35)
  • 长期文档与归档协调:#36 / PR #38
  • Wiki 归档 revision:133ad095749c
  • 本地只读镜像:docs/task/12-Bell独立登录RBAC与认证审计.md
  • 文档镜像提交:e2a4345、3c245e1
  • 文档验证:36 个 Wiki 映射一致;DevHarness 通过;31 项 unittest 通过;git diff --check 通过

实现、自动测试、Wiki、镜像、提交、推送与 PR 证据已齐。人工验收前本工单保持开启,不关闭、不勾选父工单。

## 最终证据:待验收 - 实现提交:`a5fc8f5`(PR #35) - 长期文档与归档协调:#36 / PR #38 - Wiki 归档 revision:`133ad095749c` - 本地只读镜像:`docs/task/12-Bell独立登录RBAC与认证审计.md` - 文档镜像提交:`e2a4345`、`3c245e1` - 文档验证:36 个 Wiki 映射一致;DevHarness 通过;31 项 unittest 通过;`git diff --check` 通过 实现、自动测试、Wiki、镜像、提交、推送与 PR 证据已齐。人工验收前本工单保持开启,不关闭、不勾选父工单。
Author
Owner

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

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

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

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

No dependencies set.

Reference: ila/yovision#12