Page:
Task-64-Sense登录RBAC与审计
Pages
Architecture-and-Code-Map
Audience-Document-Template
Business-Rules-and-Glossary
Common-Changes
Delivery-Documentation-Guide
Deployment-Template
Deployment-and-Operations
Development-Workflow
Existing-Project-Adoption-Guide
Home
Local-Development-and-Verification
Multi-Agent-Collaboration
New-Project-Documentation-Setup
Product-Requirements
Product-Roadmap
Project-Profile
Requirements-Migration-Matrix
Task-1-三项目并行建单与协同工单顺序
Task-101-Sense-GoAdmin-应用外壳
Task-104-Sense-30天登录有效期
Task-106-Sense-本机-Supervisor-实例
Task-12-Bell独立登录RBAC与认证审计
Task-17-Bell不可变Event与永久幂等收据
Task-18-Bell开发测试合成事件入口
Task-19-Bell规则匹配与Event-Alert链路
Task-20-Bell-Alert并发处置与审计时间线
Task-21-Sense独立GoAdmin产品骨架
Task-22-Sense独立登录RBAC与审计
Task-23-Sense设备台账与凭据边界
Task-24-ONVIF与RTSP视频接入验证
Task-25-MediaMTX进程与状态对账
Task-26-Sense单路实时监看
Task-27-Sense区域与方向警戒线版本配置
Task-28-三项目当前MVP交互原型
Task-3-GoAdmin默认模块精简与UI组件复用
Task-30-Sense原型对齐GoAdmin与Element-Plus
Task-31-Bell原型对齐GoAdmin与Element-Plus
Task-32-Sense网管与非技术人员原型
Task-33-Bell普通用户预警处理原型
Task-36-Bell-MVP文档与待验收归档
Task-37-Sense-Windows前后端一键打包
Task-40-Sense全模式密码最短6位
Task-42-Sense密码策略仅限制最短6位
Task-44-Sense管理员侧栏模块为空修复
Task-46-Sense-Windows包内配置加载
Task-48-支持ONVIF-Digest认证与安全Media地址归一化
Task-5-冻结Sense与Bell-GoAdmin技术基线
Task-50-ONVIF与RTSP分离凭据并持久化Profile
Task-51-接入成功后自动建立媒体路由并进入实时监看
Task-54-修复实时监看按需拉流循环等待
Task-56-修复设备编辑请求包含新建专用字段
Task-58-建立explore-main-dev分支治理并重置GoAdmin开发基线
Task-61-Sense冻结GoAdmin源码产品骨架
Task-64-Sense登录RBAC与审计
Task-65-Sense设备台账与凭据边界
Task-66-Sense视频接入与Profile
Task-67-Sense视频服务生命周期与状态对账
Task-68-Sense单路实时监看与播放状态反馈
Task-69-Sense多边形区域与方向警戒线配置
Task-70-Sense-Windows配置启动与打包交付
Task-9-Bell独立GoAdmin产品骨架
Task-90-Sense项目根目录Windows启动脚本
Task-92-Sense旧设备能力JSONB兼容迁移
Task-95-Sense旧媒体路由唯一约束兼容迁移
Task-97-Sense免验证码登录与管理员密码重置
Task-99-Sense登录页只读配置接口
Task-Archive-Template
Troubleshooting
Clone
This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
64 Sense登录RBAC与审计
- 类型:需求
- 所属 Epic:#7
- 所属 MVP / 版本:#8 / Sense MVP
- 状态:已完成
- 日期:2026-08-14
- 验收:2026-08-14,用户明确回复“#64 验收通过”
- Gitea 工单:#64
- Pull Request:#82
- Wiki 页面:Task-64-Sense登录RBAC与审计
- Wiki revision:见本地镜像头
背景与目标
工单 #61 只建立了冻结 GoAdmin/go-admin-ui 产品骨架,没有提供可交付的首位管理员初始化、四角色权限边界和完整身份审计。本工单在该基线上重建 Sense 自有登录、用户、角色、菜单/按钮、会话与审计能力,使系统管理员、实施/运维、站点管理员和只读用户具有可自动验证的最小权限,并确保 Sense 不与 Bell 共享账户、JWT 或 Cookie。
最终方案
- 增加公开的
POST /api/v1/bootstrap,只接受请求头中的仓库外SENSE_BOOTSTRAP_TOKEN;令牌至少 32 个字符,通过常量时间比较校验,数据库已有任一用户后永久拒绝再次初始化。仓库、迁移和配置模板不包含默认账户、默认密码或有效令牌。 - PostgreSQL 迁移固定建立
admin、implementation_operator、site_admin、viewer四个角色、菜单映射与 Casbin 最小策略。修复上游角色策略重复写入问题,确保迁移和角色创建可重复执行。 - JWT realm 固定为
Sense;前端 Cookie 使用Sense-Admin-Token,后端仅从 Authorization Bearer 或独立sense_sessionCookie 取令牌,不再接受查询参数令牌。 - 密码策略统一为 6–72 字节,不强制大小写、数字或符号组合,允许全小写;用户创建、管理员重置和本人改密共用同一规则,并修复上游改密重复哈希问题。
- 登录成功/失败、登出、密码变更和未登录/无权限拒绝同步写入身份审计。通用操作审计递归清除密码、令牌、Cookie、验证码、secret 等字段,对无法结构化的正文不做原文记录。
- 继续复用 go-admin-ui 的动态菜单、Store、Axios、Layout、权限指令和 Element Plus 通用组件;没有新增通用 UI 组件。配置、接口管理等无关管理路由不注册,即使管理员直接访问也返回 404。
- 相对建单方案的范围校正:上游迁移真实入口位于
Sense/server/cmd/migrate/migration/version/,前端 Cookie 封装位于Sense/ui/src/utils/auth.js;两项均已在工单中先行记录,目标和验收标准未改变。
修改文件
Sense/server/app/admin/apis/、router/、middleware/:一次性初始化、认证入口、路由保护和身份审计。Sense/server/app/admin/models/、service/、dto/:四角色策略、密码规则、改密与审计脱敏。Sense/server/cmd/migrate/migration/version/*identity*:角色、按钮权限、菜单映射与 Casbin 策略迁移。Sense/server/config/:独立 JWT/Cookie 安全配置与空白初始化令牌示例。Sense/ui/src/api/login.js、store/、utils/auth.js、用户/角色页面:Sense 会话名称、角色标识、密码校验和移除默认初始密码。- 架构、业务规则、本地验证和交付指南 Wiki:身份边界、初始化步骤、角色操作路径与审计要求。
验收结果
| 验收标准 | 结果 |
|---|---|
| Sense 可独立完成首位管理员初始化、登录、登出和密码变更,无默认账户或密码 | 通过 |
| admin、implementation_operator、site_admin、viewer 四角色菜单、按钮和直接 API 权限符合最小边界 | 通过 |
| 密码至少 6 个字符并允许全小写,过短密码被一致拒绝 | 通过 |
| 登录成功/失败、登出、改密和权限拒绝可审计且不记录秘密 | 通过 |
| Sense JWT、Cookie、账户库不与 Bell 共享,查询参数令牌被禁用 | 通过 |
| 无关 GoAdmin 模块没有可见入口或可直接调用的后端路由 | 通过 |
| 复用 go-admin-ui 现有外壳、权限和通用组件,没有重复新增组件 | 通过 |
测试
- Go 工具链:
go version go1.26.5 windows/amd64。 - 后端:
go test ./...、go vet ./...、go build ./...全通过;新增密码策略、初始化输入/令牌、审计截断和审计脱敏单元测试。 - 前端:
corepack pnpm@9.15.1 install --frozen-lockfile通过;lint 0 error,保留 30 条冻结上游 warning;7 suites / 29 tests 全通过;生产构建通过,保留 6 条冻结上游兼容/体积 warning。 - PostgreSQL 17 隔离集成:新库迁移后用户 0、角色 4、策略 15;错误初始化令牌 403、正确令牌 200、二次初始化 403;验证码接口 200;未登录直接访问用户接口 401 且有审计。
- 四角色矩阵:admin 可访问账户和审计;implementation_operator 可查看日志/字典但用户、部门、岗位、角色接口 403;site_admin 可维护用户并读取角色、部门、岗位、字典但日志 403;viewer 上述管理接口均 403。
- 安全回归:配置/接口管理路由对管理员与站点管理员均 404;短密码返回 400,6 位全小写密码改密及重新登录成功;登录、登出、改密和拒绝审计中没有测试密码或令牌。
- Wiki 镜像:
python dev_scripts/sync_wiki_docs.py --check通过。 - 未验证部分:未在真实生产 PostgreSQL、反向代理和目标浏览器执行人工 UI 验收;真实设备业务权限由后续 Sense 工单覆盖。
遗留问题
- 冻结 go-admin-ui 上游仍有 30 条 lint warning 和 6 条构建 warning,本工单不扩大范围清理。
- 设备、视频接入、媒体服务、实时监看和区域业务权限由后续独立工单在四角色基础上扩展。
- 登出沿用 GoAdmin 的无状态 JWT 语义,由客户端删除令牌;本工单未增加令牌黑名单或服务端即时吊销机制。