From 0dd8d90eb90fdab300249ea8a0d2562653bf24e4 Mon Sep 17 00:00:00 2001 From: ila <2+ila@noreply.git.ilapage.cn> Date: Fri, 14 Aug 2026 12:16:03 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=AE=8C=E6=88=90=20Sense=20=E7=99=BB?= =?UTF-8?q?=E5=BD=95=20RBAC=20=E4=B8=8E=E5=AE=A1=E8=AE=A1=E5=BD=92?= =?UTF-8?q?=E6=A1=A3=20(#64)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...%BD%95RBAC%E4%B8%8E%E5%AE%A1%E8%AE%A1.-.md | 53 ++++++++++++++----- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/Task-64-Sense%E7%99%BB%E5%BD%95RBAC%E4%B8%8E%E5%AE%A1%E8%AE%A1.-.md b/Task-64-Sense%E7%99%BB%E5%BD%95RBAC%E4%B8%8E%E5%AE%A1%E8%AE%A1.-.md index 06c99d0..ff4aaea 100644 --- a/Task-64-Sense%E7%99%BB%E5%BD%95RBAC%E4%B8%8E%E5%AE%A1%E8%AE%A1.-.md +++ b/Task-64-Sense%E7%99%BB%E5%BD%95RBAC%E4%B8%8E%E5%AE%A1%E8%AE%A1.-.md @@ -1,42 +1,69 @@ # 64 Sense登录RBAC与审计 -- 类型:需求 / 缺陷 / 重构 -- 所属 Epic:# -- 所属 MVP / 版本:# -- 状态:待验收 / 已完成 +- 类型:需求 +- 所属 Epic:#7 +- 所属 MVP / 版本:#8 / Sense MVP +- 状态:待验收 - 日期:2026-08-14 - Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/64 +- Pull Request:https://git.ilapage.cn/ila/yovision/pulls/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_session` Cookie 取令牌,不再接受查询参数令牌。 +- 密码策略统一为 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 语义,由客户端删除令牌;本工单未增加令牌黑名单或服务端即时吊销机制。 ## 相关提交 -- `<提交哈希>` <提交说明> +- `0411aa3` feat: 重建 Sense 认证权限与审计 (#64) +- `1dd29b6` docs: 记录 Sense 身份权限规则 (#64) +- Pull Request:#82