第1章 授权测试基础概念:权限模型、角色与资源、操作与权限矩阵

适用场景

本知识点适用于以下测试与设计活动:

  • 自主开发或第三方集成系统的授权模块功能测试
  • 权限矩阵的静态审查与动态验证
  • 基于角色的访问控制(RBAC)及属性基访问控制(ABAC)的用例设计前置分析
  • 安全审计中权限模型合规性检查

前置条件

  • 已获取系统授权架构设计文档或接口规范
  • 明确至少一种权限模型(如RBAC、ABAC、DAC、MAC)
  • 已列出系统内的核心资源与操作类型(增、删、改、查)
  • 测试环境可模拟多角色登录与权限切换

操作步骤

  1. 识别权限模型
    判定系统采用静态RBAC、动态RBAC或ABAC。例如:
    模型类型: 层级RBAC
    角色继承:admin → editor → viewer
    约束:静态职责分离(SSD)
  2. 枚举角色与资源
    列出所有角色、资源(页面、API、数据域)及操作。示例角色:
    Admin、Manager、Operator、Auditor;
    示例资源:/api/users、/api/orders、/api/reports。
  3. 构建权限矩阵
    将角色与资源+操作交叉填入矩阵,标记允许/拒绝。矩阵将作为后续测试用例的预期基准。
  4. 验证矩阵一致性
    对照设计文档检查每项权限的授权依据(角色指派规则、约束条件),记录偏离项。

权限模型核心关系图

授权测试基础概念关系图 角色 管理员 编辑者 查看者 资源 订单管理 API 用户管理 API 操作:创建 操作:读取 操作:更新 操作:删除 角色 ↔ 操作 ↔ 资源 的授权映射 角色-操作矩阵 + 操作-资源矩阵 最终构成完整的权限矩阵

输入输出物

类别 输入物 输出物
模型 系统架构设计文档、安全需求规格 权限模型类型标注文档
角色与资源 角色清单、资源清单(API端点、页面路径、数据域) 角色-资源映射表
矩阵 角色与资源+操作的交集定义 权限矩阵(JSON/CSV格式)

矩阵格式示例(JSON)

{
  "roles": {
    "admin": { "resources": ["*"], "operations": ["*"] },
    "manager": {
      "resources": ["/api/orders", "/api/reports"],
      "operations": ["read", "write"]
    },
    "operator": {
      "resources": ["/api/orders"],
      "operations": ["read", "update"]
    },
    "auditor": {
      "resources": ["/api/audit-logs"],
      "operations": ["read"]
    }
  }
}

责任边界

  • 测试工程师:负责构建权限矩阵、设计覆盖模型各角色的测试用例、执行矩阵验证。
  • 开发工程师:提供角色-资源-操作的接口列表和约束逻辑,配合矩阵审查。
  • 安全架构师:确认权限模型的正确性,审核矩阵是否满足最小权限原则。

记录材料

  1. 权限矩阵审查记录表(包含角色、资源、操作、预期结果、实际结果、状态)
  2. 角色-资源映射图谱(建议使用 UML 或 ER 图)
  3. 模型决策记录:采用 RBAC 或 ABAC 的理由及约束说明

异常处理

典型异常场景及应对

  • 角色未定义:要求开发补充角色枚举,在测试环境模拟临时角色并验证默认拒绝。
  • 资源路径歧义:统一使用规范化 RUI(资源统一标识符),如 /api/v2/orders/{id} 而非通配。
  • 矩阵冲突:若同一角色对某资源既允许又禁止,按“拒绝优先”原则降级,并标记为设计缺陷。

验收标准

  • 权限矩阵覆盖所有显式角色和核心资源(覆盖率 ≥ 95%)
  • 矩阵中每项授权都有明确来源(设计文档或配置库)
  • 通过静态审查,不存在未定义角色或资源导致的权限模糊
  • 矩阵可转换为可执行的测试断言(例如 JSON 格式)

实践提示:在构建权限矩阵时,建议使用“否定优先”策略——先列出所有拒绝项,再补充允许项,可有效避免意外授权。

角色-操作-资源 快速参考表

角色 资源 创建 读取 更新 删除
admin 所有 ✓ ✓ ✓ ✓
manager /api/orders ✓ ✓ ✓ ✗
operator /api/orders ✗ ✓ ✓ ✗
auditor /api/audit-logs ✗ ✓ ✗ ✗