【权限控制】ACL、RBAC、ABAC三大权限管理模型,到底怎么选?

news/2024/7/7 7:33:40 标签: 前端, javascript, 权限

ACL、RBAC 和 ABAC 是三种常见的权限管理模型,每种模型在不同的场景下都有适用性。选择哪种权限管理模型取决于具体需求和环境。

ACL(Access Control List:访问控制列表)

ACL 是最简单的权限管理模型之一。它基于对象主体之间的关系来控制访问权限。ACL 将权限直接与用户或用户组相关联,管理员直接给用户授予某些权限即可。
这种模型适用于小型和简单系统,其中权限控制较为简单,并且角色和权限的变化较少。

RBAC(Role-Based Access Control,基于角色的访问控制)

RBAC 是应用最广泛的权限管理模型之一。它通过定义角色和角色的权限集合来管理访问控制。用户被分配到角色,角色与权限相关联,从而精确地控制用户对系统资源的访问。
RBAC 适用于大型系统,特别是那些需要灵活、可扩展的权限管理的场景。使用 RBAC 可以简化权限管理的复杂性并提高系统的安全性。
在这里插入图片描述

RBAC权限管理的模式,最适合公司内部的管理系统,不适合对外互联网用户的系统。

用户:用户表
角色(部门):角色表(部门表)
权限权限

权限:是授予角色的(或者说部门,或者说组),一个个角色,就是一条条记录(对应到公司就是开发部,hr部门,股东部)。

用户:一个个用户是用户表中一条条记录,用户属于某个部门,就具备了部门下的权限

三张表之间的关系:

  • 用户和角色关系:多对多,中间表
  • 角色和权限关系:多对多,中间表

那么就一共有了5张表:

  1. 用户表
  2. 角色表
  3. 权限
  4. 用户和角色关联表
  5. 角色和权限关联表

ABAC(Attribute-Based Access Control,基于属性的访问控制)

ABAC(Attribute-Based Access Control,基于属性的访问控制),又称为PBAC(Policy-Based Access Control,基于策略的访问控制),或CBAC(Claims-Based Access Control,基于声明的访问控制)。ABAC 是一种基于属性的权限管理模型,它根据多个属性(如用户属性、环境条件、时间等)来进行访问控制决策。ABAC 通过定义策略来决定用户是否有权访问特定的资源。
这种模型适合于需要更细粒度、动态和灵活的访问控制的场景。ABAC 在复杂的环境中可以提供高度的可配置性和可扩展性。
在这里插入图片描述

不同于常见的将用户通过某些方式关联到权限的方式,ABAC则是通过动态计算一个或一组属性来判断是否满足某种条件来进行授权判断(可以编写简单的逻辑)。

属性通常来说分为四类:

  1. 用户属性(比如用户年龄,用户地址)
  2. 环境属性(比如当前时间)
  3. 操作属性(增、删、改、查)
  4. 对象属性(比如一篇文章,又称资源属性)
    特点:

集中化管理

  • 可以按需求实现不同颗粒度的权限控制
  • 不需要预定义判断逻辑,减轻了权限系统的维护成功,特别是在需求经常表的系统重
  • 定义权限时,不能直接看出用户和对象间的关系
  • 规则如果稍微复杂一点,或者设计混乱,会给管理者维护和追查带来麻烦
  • 权限判断需要实时执行,规则过多会导致性能出现问题

总结

选择适当的权限管理模型需要考虑以下因素:

  • 系统规模:对于小型系统,ACL 可能是足够简单的解决方案。而对于大型系统,RBAC 或 ABAC 可能更适合。
  • 复杂性:RBAC 和 ABAC 提供了更高级别的权限管理功能,但也带来了更多的复杂性。根据系统需求和管理员的技能来评估是否需要更复杂的模型。
  • 灵活性:如果需要灵活性和动态的权限管理,ABAC 是更好的选择。RBAC 提供了一种适度的灵活性,而 ACL 则较为静态。

Casbin快速实现权限控制

Casbin是一个支持如ACL, RBAC, ABAC等访问模型,可用于Golang, Java, C/C++, Node.js, Javascript, PHP, Laravel, Python, .NET (C#), Delphi, Rust, Ruby, Lua (OpenResty), Dart (Flutter)和Elixir的授权库。
Casbin中文文档 : https://casbin.org/zh/


http://www.niftyadmin.cn/n/1270912.html

相关文章

更好的重写toString方法

2019独角兽企业重金招聘Python工程师标准>>> toString方法的规定 建议你始终要重写toString方法 虽然java.lang.Object提供了toString方法的一个实现,但它返回的字符串通常不是我们所希望看到的: // test.ch02.PhoneNumber12960c System.out.…

鸿蒙系统怎么调用其他摄影头,鸿蒙分布式技术突破摄像头空间使用想象

“华为智选品鉴会”在深圳举行,本次品鉴会以“给全场景智慧生活添点温度”为主题,一次性发布了16款华为LoT智能产品,并在多个产品上首次搭载应用了鸿蒙分布式技术。据悉,2020年是华为IoT生态业务的崛起之年,未来5年&am…

JSX,了解一下?

JSX是神马 书写规范JSX中的{} 属性children防止xss其它注意事项JSX 与 单入口JSX 与 模板引擎的区别JSX是对真实DOM的描述JSX是神马 JSX是React中特有的东东&#xff0c;全称 Javascriptのxml。 它的长相是这样的 let jsx <h1>hello</h1>; 复制代码看起来就是一个…

TCP和UDP的最完整的区别

TCP UDPTCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多&#xff0c;UDP较少&#xff1b; 3.UDP程序结构较简单 4.流模式&#xff08;TCP&#xff09;与数据报模式(UDP); 5.TCP保证数据正确性&#xff0c;UDP可能丢包 6.TCP保证数据顺序&#xff0c;UDP不…

登录界面转换实现html,HTML登录界面的实现

实现这个界面非常简单&#xff0c;以前就学过静态网页的开发&#xff0c;虽然学的不精&#xff0c;但还是懂一些的。这次主要是实现对用户名&#xff0c;密码的验证&#xff0c;即验证用户名和密码是否为空&#xff0c;没什么说的&#xff0c;直接看代码吧用户登录function log…

js通过fileReader获取图片的base64格式(pc端和手机端都可以,但是要先在页面中创建dom)...

1 // 创建一个FileReader对象 2 var reader new FileReader();3 4 // 绑定load事件5 reader.onload function(e) {6 console.log(e.target.result);7 }8 9 // 读取File对象的数据10 reader.readAsDataURL(document.querySelector("input[typefile]").files[0])…

html视频播放后自动跳转到页面,【Web前端问题】html视频播放完后跳转

案例#modelView{background-color:#DDDDDD;z-index:0;opacity:0.7;height: 100%;width: 100%;position: relative;}.playvideo{padding-top: auto;z-index: 9999;position: relative;}.zy_media{z-index: 999999999}您的浏览器不支持HTML5视频//document.documentElement.style…

elasticsearch-更新文档

2019独角兽企业重金招聘Python工程师标准>>> 更新整个文档 文档在Elasticsearch中是不可变的——我们不能修改他们。如果需要更新已存在的文档&#xff0c;我们可以使用《索引文档》章节提到的index API 重建索引(reindex) 或者替换掉它。 PUT /website/blog/123 {&…