目录

领码方案权限即数据企业系统中的字段级访问控制架构实战Ver1.1

领码方案|权限即数据:企业系统中的字段级访问控制架构实战(Ver=1.1)

在数据驱动与合规并行的企业世界里,“权限即数据”已成为系统架构的底层共识。
Ver=1.1 在 V=1.0 的基础上,新增 权限快照(Permission Snapshot)+ 特征码(Signature) 机制,减少重复 SQL 鉴权、提升性能,并强化安全与前后端协同。


1. 引子:从“权限即数据”到“权限快照”

  • V=1.0:一次查询 → 全量权限 → 前端渲染 → 后端每次操作重新鉴权。
  • V=1.1:一次查询 → 全量权限 + 特征码 → 前端缓存快照 → 操作时回传 → 后端仅做快照校验与版本检查。
  • 核心收益:
    • 减少重复 SQL 鉴权
    • 降低数据库压力
    • 提升前后端协同效率

2. 使用场景

  • 高并发业务(CRM、ERP、财务系统)频繁编辑同一批数据。
  • 离线批量操作(导出、批量更新)需要一次性鉴权。
  • 前端需要根据权限快照即时控制 UI(按钮显隐、字段可编辑状态)。

3. 架构总览(V=1.1)

用户/服务请求 携带主体上下文

数据库层 SQL CASE 判定规则命中

返回业务数据 命中规则串

合并引擎 默认 » 提升 » 极限 封顶 »deny 收敛

生成权限快照 Permission Snapshot

生成特征码 Signature/HMAC

返回前端 数据 权限快照 特征码

前端渲染 UI 按钮显隐/字段可编辑状态

用户发起增删改操作 携带快照 特征码

后端校验 签名匹配 规则版本 时间戳

权限校验通过

拒绝操作 记录审计日志

执行操作 记录审计日志


4. 权限快照结构体

{
  "meta": {
    "tenant": "T1",
    "ruleVersion": "1.1.0",
    "signature": "a9f3c2e1...",
    "timestamp": "2025-09-16T18:30:00Z"
  },
  "row": {
    "canView": true,
    "canEditRow": false,
    "canDelete": false
  },
  "fields": {
    "name": "editable",
    "salary": "masked",
    "email": "view",
    "notes": "hidden"
  }
}

5. 特征码生成与校验

  • 生成

    signature = HMAC(secretKey, JSON.stringify(permissionPayload))
  • 绑定信息

    • 规则版本号(ruleVersion)
    • 时间戳(timestamp)
    • 可选一次性 token(防重放)
  • 校验流程

    1. 验证签名是否匹配权限结构。
    2. 检查规则版本是否与当前系统一致。
    3. 检查时间戳是否在有效期内。
    4. 校验权限结构是否满足本次操作要求。

6. 接口定义(API Spec)

6.1 获取数据与权限快照

HTTP
GET /api/v1/resources

请求参数

参数类型必填说明
tenantIdstring租户ID
pageint页码
sizeint每页数量

响应示例

{
  "data": [
    { "id": 101, "name": "Alice", "salary": "****", "email": "alice@corp.com" }
  ],
  "permissionSnapshot": {
    "meta": {
      "tenant": "T1",
      "ruleVersion": "1.1.0",
      "signature": "a9f3c2e1...",
      "timestamp": "2025-09-16T18:30:00Z"
    },
    "row": { "canView": true, "canEditRow": false, "canDelete": false },
    "fields": { "name": "editable", "salary": "masked", "email": "view", "notes": "hidden" }
  }
}

6.2 提交修改(携带快照)

HTTP
PUT /api/v1/resources/{id}

请求参数

参数类型必填说明
idint资源ID
payloadobject修改内容
permissionSnapshotobject权限快照
signaturestring特征码

请求示例

{
  "payload": { "notes": "Updated remark" },
  "permissionSnapshot": { ... },
  "signature": "a9f3c2e1..."
}

响应示例

{
  "status": "success",
  "message": "Resource updated"
}

7. 安全与性能优化

风险点对策
权限结构被篡改签名校验
权限过期版本号 + 时间戳
重放攻击一次性 token / 短时有效期
缓存膨胀LRU/TTL 策略 + 热点快照优先缓存

8. 性能收益

  • 减少 SQL 鉴权频率
  • 前端即时渲染
  • 批量操作友好

9. V=Next 展望

  • 支持多算法签名(RSA/ECDSA)
  • 引入权限快照链(Snapshot Chain)
  • 与零信任架构融合