权限系统的设计模式 ACL RBAC ABAC

ACL(Access Control List):访问权限列表  如:

user1-->AC1

user1-->AC2

user2-->AC1    此时权限汇总成一个列表

这种设计最常见的应用就是文件系统的权限设计,如微软的NTFS

对权限控制比较分散,不便于管理,比如无法简单地将一组文件设置统一的权限开放给指定的一群用户

RBAC(Role Base Access Control):基于角色的权限控制

与ACL 对比  RBAC不用给用户单个分配权限,只用指向对应的角色就会有对应的权限,而且分配权限和收回权限都很方便

如菜单权限的设计:用户与角色关联,角色与菜单关联

ABAC(Attribute Base Access Control) 基于属性的权限控制

不同于常见的将用户通过某种方式关联到权限的方式,ABAC则是通过动态计算一个或一组属性来是否满足某种条件来进行授权判断(可以编写简单的逻辑)。属性通常来说分为四类:用户属性(如用户年龄),环境属性(如当前时间),操作属性(如读取)和对象属性(如一篇文章,又称资源属性),所以理论上能够实现非常灵活的权限控制,几乎能满足所有类型的需求。

例如规则:“允许所有班主任在上课时间自由进出校门”这条规则,其中,“班主任”是用户的角色属性,“上课时间”是环境属性,“进出”是操作属性,而“校门”就是对象属性了。为了实现便捷的规则设置和规则判断执行,ABAC通常有配置文件(XML、YAML等)或DSL配合规则解析引擎使用。XACML(eXtensible Access Control Markup Language)是ABAC的一个实现,但是该设计过于复杂,我还没有完全理解,故不做介绍。

总结一下,ABAC有如下特点:

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

既然ABAC这么好,那最流行的为什么还是RBAC呢?

我认为主要还是因为大部分系统对权限控制并没有过多的需求,而且ABAC的管理相对来说太复杂了。Kubernetes便因为ABAC太难用,在1.8版本里引入了RBAC的方案

ABAC有时也被称为PBAC(Policy-Based Access Control)或CBAC(Claims-Based Access Control)。

原文地址:https://blog.csdn.net/m0_37163942/article/details/83652065

原文地址:https://www.cnblogs.com/jpfss/p/11210653.html

时间: 2024-11-09 21:11:34

权限系统的设计模式 ACL RBAC ABAC的相关文章

权限系统与RBAC模型概述

为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3793894.html 0. 前言 一年前,我负责的一个项目中需要权限管理.当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋.当时google了一些权限管理的资料,从中了解到早就有了RBAC这个东西.可惜一直没狠下心来学习. 更详细的RBAC模型非常复杂.本文只做了一些基础的理论性概述.

权限系统与RBAC模型概述[绝对经典]

0. 前言 一年前,我负责的一个项目中需要权限管理.当时凭着自己的逻辑设计出了一套权限管理模型,基本原理与RBAC非常相似,只是过于简陋.当时google了一些权限管理的资料,从中了解到早就有了RBAC这个东西.可惜一直没狠下心来学习. 更详细的RBAC模型非常复杂.本文只做了一些基础的理论性概述.本文资料完全来自互联网. 1. 权限系统与RBAC模型概述 RBAC(Role-Based Access Control )基于角色的访问控制. 在20世纪90年代期间,大量的专家学者和专门研究单位对

TP支持菜单动态生成RBAC权限系统数据库结构设计方案

最简单基于RBAC权限系统数据库结构设计 包括如下几个表 1. 用户表 -- Table "t_user" DDL CREATE TABLE `t_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(100) DEFAULT NULL, `password` varchar(100) DEFAULT NULL, `name` varchar(100) DEFAULT NULL, `status` int(11

phpcms中的RBAC权限系统

原文链接:https://www.cnblogs.com/duanbiaowu/p/5089243.html PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 userid mediumint(6) unsigned   PK auto_increment 用户id 2 username varchar(20) YES   INDEX   用户名

转:RBAC如何设计一个权限系统

前言 权限管理是所有后台系统的都会涉及的一个重要组成部分,主要目的是对不同的人访问资源进行权限的控制,避免因权限控制缺失或操作不当引发的风险问题,如操作错误,隐私数据泄露等问题.目前在公司负责权限这块,所以对权限这块的设计比较熟悉,公司采用微服务架构,权限系统自然就独立出来了,其他业务系统包括商品中心,订单中心,用户中心,仓库系统,小程序,多个APP等十几个系统和终端 1.权限模型 迄今为止最为普及的权限设计模型是RBAC模型,基于角色的访问控制(Role-Based Access Contro

简洁常用权限系统的设计与实现(一):构造权限菜单树的N(N>=4)种方法

权限系统,Web开发常见标准子系统之一.结合自己的一些思考和实践,从本篇开始权限系统的设计与实现之路. 最近,重构了项目的权限菜单构造过程,向前端返回json格式的权限树. 这一篇,只是大致介绍下这个问题,并给出4种方法的整体思路,后续再分别详细介绍这4种方法,再往后介绍完整的权限系统的设计与实现. 权限表的结构: acl.parent_acl, 最重要的就是这2个字段,有了这2个字段,就可以构造一棵树了. 前端需要的json格式: "data":[{ "acl":

途牛原创|途牛无线权限系统的架构设计与实践

序 之前写过一篇大话权限中心的PHP架构之道,主要是从软件工程角度介绍,如何通过编码规范.依赖管理.数据源架构.事务处理.单元测试等技术,来保障权限系统的高可用,并未真正的涉及这套系统的架构. 今天准备从设计细节上分享一二. 望各位看官,心有“空杯”,带着“问题”一探究竟. 0. RBAC3 这里还是尤为的重要,因为他是整套系统设计的根基. 所以残忍的从上一篇中复制了一遍... RBAC认为权限授权实际上是Who.What.How的问题.在RBAC模型中,who.what.how构成了访问权限三

权限系统概要

前言: 权限往往是一个极其复杂的问题,但也可简单表述为这样的逻辑表达式:判断"Who对What(Which)进行How的操作"的逻辑表达式是否为真.针对不同的应用,需要根据项目的实际情况和具体架构,在维护性.灵活性.完整性等N多个方案之间比较权衡,选择符合的方案. 目标: 直观,因为系统最终会由最终用户来维护,权限分配的直观和容易理解,显得比较重要,系统不辞劳苦的实现了组的继承,除了功能的必须,更主要的就是因为它足够直观. 简单,包括概念数量上的简单和意义上的简单还有功能上的简单.想用

文件的权限和访问控制列表(ACL)

前言 文件的权限以及访问控制列表贯穿在整个的Linux使用过程中.我们知道,在Linux 中一切皆文件,因而文件的权限,就自然而然地成为了Linux使用过程中需要频繁接触到的知识内容.而文件权限这一部分地内容,又非常地复杂,因为我们将在这篇文章当中详细地介绍文件的权限,加深自己的理解,同时留作备忘. 本文将通过以下几个方面的内容来介绍文件的权限. 1.文件权限 主要介绍文件的权限,以及每种权限代表着哪些含义. 2.修改文件权限  介绍如何修改文件的权限 3.Linux 系统上特殊文件权限 介绍L