Files
YG_FT/docs/权限验收测试用例.md
wuyongtao 6f0e82f351 feat: 平台治理与权限体系完善,存储进度/GPU预留/审批中心与日志整合
- 平台治理: 租户用户权限层次、资源ACL、审批中心与审批模板、访问申请
- 存储: MinIO 存储进度迁移、对象存储安全加固与测试
- 计算: GPU 资源预留、compute 轮询与同步增强
- 权限: permission v2 迁移、权限安全验收测试
- 日志: 后端运行日志中文说明、操作日志整合
- 数据处理/评测: 数据转换与模型评测优化

Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-21 09:49:48 +08:00

13 KiB
Raw Blame History

权限验收测试用例

版本:权限 2.0 前端权限页面收口版
编写日期2026-08-20
适用系统YG_FT 微调平台主工程、Backend、Frontend、Compute Agent、PostgreSQL、Redis、MinIO
说明:本文件将自动化验证、单节点页面验证和多用户/多节点专项验证分开记录。

1. 验收目标

验证平台权限功能是否能够形成以下闭环:

登录认证 → 页面权限 → 租户成员 → 资源创建 → ACL/访问申请 → 审批 → 训练/评测/推理执行 → GPU/配额预留 → 任务释放 → 审计 → 软删除和对象清理

验收重点:

  • 前端页面是否提供完整的权限管理入口。
  • 普通用户是否可以提交访问申请、查看自己的申请和接受租户邀请。
  • 管理员是否可以配置用户页面权限、租户成员、租户配额、资源 ACL 和审批策略。
  • 页面按钮隐藏只是辅助体验,直接调用接口仍必须由后端返回 401/403。
  • 用户、租户、资源、ACL、审批、GPU、配额和 MinIO 对象状态是否能够保持一致。

2. 测试环境

2.1 服务

服务 地址/容器 验收要求
Frontend http://127.0.0.1:16801 页面可打开,路由切换无白屏
Backend http://127.0.0.1:17861/modelTF 健康接口返回成功
Compute API http://172.25.179.69:19100 当前可达节点可进行单节点验证
Redis WSL Docker yg-ft-redis 容器 healthy
MinIO WSL Docker yg-ft-minio 容器 healthy可进行对象读写
PostgreSQL 当前环境实际远程 PostgreSQL 初始化字段和增量迁移均存在

2.2 测试账号和数据

准备以下测试对象,禁止使用生产账号和真实敏感数据:

对象 建议值 说明
平台管理员 当前环境管理员账号 执行用户、租户、ACL、审批和配额管理
普通用户 A 新建测试用户 作为资源所有者
普通用户 B 新建测试用户 作为被授权用户和申请人
租户 A 新建测试租户 与租户 B 隔离验证
租户 B 新建测试租户 跨租户访问验证
测试数据集 test_data_0817 或新的小数据集 用于 ACL、训练和下载验证
测试模型 qwen3.5-0.8B 用于模型使用权限和推理验证

3. 自动化验证结果

以下项目已在当前开发环境执行:

编号 验证内容 结果
AUTO-01 npm run build 通过;仅有既有 Font Awesome 路径和 chunk size 警告
AUTO-02 test_permission_security.py 通过8 passed
AUTO-03 test_storage_security.py 已包含在 8 passed 中
AUTO-04 后端权限文件 py_compile 通过
AUTO-05 git diff --check 通过
AUTO-06 Backend、Frontend、Compute、Redis、MinIO 容器状态 通过Backend healthy
AUTO-07 迁移后字段核对 通过users、eval_tasks、compare_tasks、data_convert_tasks、storage_objects 字段存在
AUTO-08 临时用户软删除闭环 通过,状态为 deleted、存在 deleted_at原凭据登录返回 401
AUTO-09 docker/offline/src 同步 通过,离线 SQL 目录只保留 000_full_init.sql

4. 前端页面验收

4.1 组织与权限

页面入口:/organization

用例 操作步骤 预期结果
UI-ORG-01 管理员打开“组织与权限” 显示“用户与角色”“租户与配额”两个页签
UI-ORG-02 点击“创建用户” 进入用户创建页面,可填写账号、角色、状态和页面权限
UI-ORG-03 创建普通用户 默认授予业务页面权限,不自动授予组织管理和算力节点权限
UI-ORG-04 用户列表点击“权限” 进入 /user-settings/:id/permission,显示用户角色、所属租户、状态和权限矩阵
UI-ORG-05 修改用户页面权限并保存 页面提示保存成功,刷新后权限保持一致
UI-ORG-06 将普通用户改为管理员 页面显示全部权限;保存时自动补齐全部权限码
UI-ORG-07 查看已软删除用户 显示“已删除”,权限页只读,不能重新激活
UI-ORG-08 普通用户访问组织与权限 路由跳转到无权访问页,菜单不显示管理员治理入口

4.2 租户与配额

页面入口:/organization?tab=tenants/tenants/:id

用例 操作步骤 预期结果
UI-TEN-01 管理员创建租户并设置 GPU、存储配额 租户列表出现新租户,配额显示正确
UI-TEN-02 打开租户详情 显示租户信息、配额设置、GPU 预留量和成员列表
UI-TEN-03 邀请成员并设置角色、邀请有效期 页面提示邀请成功,成员状态为待接受,过期时间正确
UI-TEN-04 修改成员角色 成员列表角色更新,不能通过页面授予非法 owner 权限
UI-TEN-05 移除成员 成员状态/关系更新,后续资源访问按后端权限拒绝
UI-TEN-06 保存配额 配额配置更新,已预留 GPU 数量不超过新配额

4.3 我的申请与租户邀请

页面入口:/approval-instances?tab=mine/approval-instances?tab=access/approval-instances?tab=invitations

用例 操作步骤 预期结果
UI-SELF-01 普通用户打开审批中心 可进入,不再被管理员专属路由拦截
UI-SELF-02 打开“访问申请” 可选择可见的数据集/训练模型,资源名称优先显示中文名称,同时保留 ID
UI-SELF-03 提交 read/execute/download 申请 申请出现在“我的访问申请”,状态为审批中
UI-SELF-04 撤回待审批申请 二次确认后状态变为已撤回,不能再次撤回
UI-SELF-05 打开“租户邀请” 显示租户、角色、邀请人、有效期和状态
UI-SELF-06 接受有效邀请 状态变为已加入,获得对应租户成员关系
UI-SELF-07 接受过期邀请 后端拒绝,页面显示失败原因,成员关系不产生

4.4 资源授权

页面入口:/resource-acl

用例 操作步骤 预期结果
UI-ACL-01 管理员选择数据集或训练模型 显示资源名称和资源 ID不显示已软删除资源
UI-ACL-02 查看资源 ACL 显示用户/租户角色、主体类型和权限标签
UI-ACL-03 增加用户 ACL 可选择查看、编辑、使用、下载等权限并保存
UI-ACL-04 增加角色 ACL 可选择租户管理员、成员、只读角色;后端校验最终结果
UI-ACL-05 移除全部 ACL 页面二次确认后保存空 ACL授权全部撤销
UI-ACL-06 ACL 查询失败 页面显示明确错误提示,不把失败误显示为空授权
UI-ACL-07 普通用户打开资源授权页面 页面入口隐藏,直接访问接口返回 403

4.5 审批中心

页面入口:/approval-instances

用例 操作步骤 预期结果
UI-APP-01 管理员打开审批申请 显示资源类型、申请事项、申请人、状态和当前步骤的中文信息
UI-APP-02 管理员打开审批策略 可配置指定用户、租户管理员、平台管理员审批步骤,不需要输入 JSON
UI-APP-03 指定审批人审批 只能由当前会话指定审批人执行,审批结果和意见可见
UI-APP-04 申请人查看自己的申请 只能看到自己的申请,不显示其他租户的审批数据
UI-APP-05 审批通过 ACL、GPU 分配或成员关系等业务效果真正落地
UI-APP-06 审批拒绝/过期 状态明确显示,不能产生授权或资源占用

5. 后端接口与页面联动验收

用例 操作步骤 预期结果
API-AUTH-01 未登录访问任意受保护页面接口 返回 401前端回到登录页
API-AUTH-02 普通用户直接调用管理员接口 返回 403不能仅依赖前端隐藏按钮
API-AUTH-03 禁用用户使用旧 Token 返回 401 或明确无效会话错误
API-AUTH-04 已删除用户登录 返回 401
API-TEN-01 用户访问其他租户资源详情 返回 403 或资源不存在,不泄露资源内容
API-TEN-02 过期成员访问租户资源 返回 403
API-ACL-01 没有 read 的用户读取资源 ACL 返回 403
API-ACL-02 只有 read 的用户执行模型推理 返回 403
API-ACL-03 只有 execute 的用户下载模型 返回 403
API-ACL-04 ACL 授权后重新访问 按授权动作成功
API-APP-01 申请人提交自己的审批决策 返回 403
API-APP-02 非指定审批人提交决策 返回 403
API-APP-03 重复提交相同资源访问申请 复用或拒绝重复待审批申请,不重复写 ACL
API-LIFE-01 删除用户 会话、成员、ACL、GPU 分配、待审批项和用户资源状态同步处理
API-LIFE-02 执行存储清理 已删除 MinIO 对象进入清理,失败任务可重试

6. 训练、评测、推理权限验收

用例 操作步骤 预期结果
JOB-01 用户使用无权限数据集创建训练 预检失败,显示数据集无权限
JOB-02 用户使用授权数据集创建训练 预检通过GPU 和租户配额原子预留
JOB-03 用户使用未授权训练模型推理 页面提示无权限,接口返回 403
JOB-04 用户使用已授权训练模型推理 可选择有权限的算力节点和 GPU 卡
JOB-05 用户没有 download 权限导出模型 操作按钮不显示,接口返回 403
JOB-06 评测任务结束 GPU 预留和租户配额预留释放
JOB-07 推理任务删除 推理服务释放任务软删除ACL 状态撤销
JOB-08 节点不可达或 MinIO 暂时不可用 任务进入失败/重试状态,不留下永久 GPU 或配额占用

7. GPU、配额和多节点专项验收

以下用例需要第二个可达节点或一个包含多张可分配 GPU 卡的节点,当前单节点环境暂保留。

用例 操作步骤 预期结果
GPU-01 租户 GPU 配额设置为 1同时提交两个 GPU 任务 第二个任务被拒绝,不能超配
GPU-02 同一节点同一张卡由两个用户申请 审批/分配阶段返回 409不能重复占用
GPU-03 同一节点选择两张空闲卡 任务使用页面指定的两张卡,不使用其他卡
GPU-04 任务失败或取消 GPU 分配和配额预留释放
GPU-05 Backend 重启后恢复任务状态 已完成/失败任务不重复占用;运行任务保持可对账
GPU-06 模型训练、推理、评测选择不同节点 模型和数据从 MinIO 准备到指定节点,不错误派发到其他节点
GPU-07 节点失联 任务进入失败或待重试,资源占用在超时后回收

8. MinIO 故障专项验收

用例 操作步骤 预期结果
MINIO-01 暂停 MinIO 容器后上传数据集 页面显示明确存储不可用,不显示上传成功
MINIO-02 MinIO 暂停期间预检训练 预检提示对象不可用,可重试
MINIO-03 MinIO 恢复后重试任务 对象可重新准备,任务继续或重新提交成功
MINIO-04 删除用户后执行对象清理 用户资源对象标记 deleted清理成功后标记 purged
MINIO-05 清理时对象删除失败 storage cleanup job 保留 failed 状态和错误原因,后续可重试

9. 离线部署验收

用例 操作步骤 预期结果
OFFLINE-01 检查 docker/offline/src/backend/app/db/sql 只存在完整的 000_full_init.sql
OFFLINE-02 清空数据库并执行完整初始化 SQL 不缺权限相关表和字段Backend 可启动
OFFLINE-03 离线启动 Frontend 不请求在线 CDN页面可正常打开
OFFLINE-04 离线启动 Backend、Compute、MinIO 各服务使用独立网络和配置,权限接口可用
OFFLINE-05 离线新库执行用户/租户/ACL/审批流程 与主工程行为一致

10. 问题记录规则

每条失败用例至少记录:

  • 测试编号、执行时间、执行人和账号。
  • 页面 URL、接口 URL、请求方法和请求 ID。
  • 当前用户、租户、资源 ID、资源所属租户。
  • 实际 HTTP 状态码、页面提示、数据库状态和容器日志。
  • 是否产生了残留 ACL、GPU 分配、配额预留、MinIO 对象或审批记录。
  • 修复提交、回归结果和是否需要再次现场验证。

11. 当前验收结论

当前已自动验证:前端构建、后端权限安全测试、存储安全测试、数据库字段迁移、容器健康、用户软删除登录拦截和离线源码 SQL 目录结构。

当前前端权限页面已完成主要操作闭环:

  • 用户页面权限设置。
  • 用户创建时的页面权限配置。
  • 租户成员邀请、角色、有效期和配额展示。
  • 普通用户访问申请、我的申请和租户邀请接受。
  • 资源用户/角色 ACL 管理和全部撤销。
  • 审批申请、审批策略可视化配置和中文状态展示。

仍需现场验证:双用户跨租户、多 GPU 并发、第二节点调度、节点失联回收、MinIO 故障注入和完整浏览器点击流。这些属于环境依赖型验收,不代表前端页面缺少入口。