Skip to content

ABAC - 基于属性的访问控制

什么是 ABAC?

ABAC就像智能门禁:不只看你的工牌,还要看时间、地点、要做什么。

比如:张三(IT部门)在工作时间(9-18点)在办公室(内网)可以编辑文档(普通级别)。

核心思想

ABAC通过四种属性综合决策:用户属性 + 资源属性 + 环境属性 + 操作属性 → 权限决策

四大属性

ABAC通过四种属性来决定权限:

用户属性:张三、IT部门、5级、后端团队 资源属性:文档、普通级别、张三创建、IT部门 环境属性:14:30、工作日、办公室、内网 操作属性:读取、低风险、普通紧急度

ABAC 决策流程

代码示例

typescript
// 简单的ABAC规则
const rule = {
  name: '部门文档访问',
  condition: (user, resource, env, action) =>
    action === 'read' &&
    resource.type === 'document' &&
    user.department === resource.department &&
    env.isWorkingHours
};

// 权限检查
function checkPermission(user, resource, env, action) {
  return rule.condition(user, resource, env, action);
}

优点

  • 极其灵活:可以处理复杂的权限场景
  • 细粒度控制:精确到具体资源和操作
  • 上下文感知:考虑时间、地点等环境因素
  • 符合现实:更接近真实的权限需求

缺点

  • 复杂度高:每次权限检查都需要复杂计算
  • 性能开销大:需要收集属性、评估规则
  • 调试困难:权限拒绝原因复杂
  • 管理复杂:规则数量多,可能冲突

适用场景

适合:

  • 多租户系统(需要复杂隔离)
  • 云服务平台(资源类型多样)
  • 金融/医疗系统(需要考虑时间、地点、风险)

不适合:

  • 简单的企业应用(权限需求简单)
  • 小型团队项目(开发资源有限)

总结

ABAC灵活强大,适合复杂权限需求。但实现复杂,需要权衡成本和收益。

贡献者

huoshan
huoshan

用知识点燃技术的火山