参考:https://zhuanlan.zhihu.com/p/61447407
前言
从本质来说,无论何种类型的权限管理模型都可以抽象出三个基本的要素。即:用户(user)、系统/应用(system/application)、策略(policy)。策略决定了用户和不同功能应用之间如何交互。反过来,也就是说,无论设计何种权限管理的模型,都是基于这三个基本要素来展开。本文聚焦于目前应用最广的RBAC模型,但在这里提出三个基本要素,主要是为了帮助大家更好的理解权限管理,不至于在众多权限模型中迷失。
不同的公司或软件提供商,设计了无数种控制用户访问功能或资源的方法。但无论哪种设计,都可归到四种经典权限模型里。自主访问控制(DAC,Discretionary Access Contro), 强制访问控制 (MAC,Mandatory Access Control), 基于角色访问控制 (RBAC,Role-based Access Control), 和基于属性访问控制 (ABAC,Attribute-based Access Control).(我觉得翻译不好,但也找不到更贴切的。本文下面内容均以英文首字母来代替:DAC,MAC,RBAC,ABAC)。
一:DAC,MAC
本文主要就RBAC展开分析该模型的使用场景,以及如何基于该模型设计出合适的权限管理体系。但从文章便于理解的完整性的角度来考虑,会对DAC,MAC和ABAC进行简要的介绍
DAC:被操作对象,根据访问控制规则,来判断操作主体可对操作对象做哪些操作,比如只读或者是可写的权限。而自主的含义,则是拥有某种权限的用户,可以把权限赋予其他用户。
MAC:被操作对象及用户两方均有各自的权限标识,用户能否对对象进行操作,取决于权限标识的对照关系。这种模型多用于等级制度明显,信息访问安全性要求高的场景,比如军事。
ABAC和RBAC有很多相通的地方,而且相比较而言ABAC实际上更灵活,符合未来发展的方向。因此,我们分析完RBAC后,再回过头来看ABAC。
二:那么什么是RBAC呢
Role-based Access Control,基于角色的权限控制模型。顾名思义,给用户定义角色,通过角色来控制权限。目前来说基于角色权限控制模型是应用较广的一个。特别是2B方向SAAS领域,应用尤其常见。
怎么利用RBAC模型来进行权限体系的设计
我们已经知道什么是RBAC模型了,在分析怎么来根据此模型来设计权限体系之前,我们再把这个模型要素进行拆分一下。首先是,用户、角色、权限。而权限,具体到某个软件来说,实际上包含两个方面。一个是菜单权限,另一个是数据权限。
看看ABAC,顺便畅想下未来的权限模式
至此,我们可以了解到,RBAC模型实际上能解决大部分的权限设计问题了。那么,ABAC到底是什么呢?它存在的意义在哪里?关于未来的权限设计趋势,它能带给我们什么启发呢?带着这些问题,我们先来看看到底什么是ABAC模型。
ABAC,Attribute-based Access Control. 基于属性的访问控制 。而属性,总的来说有三类,用户属性、系统或应用被访问属性(数据和操作)、环境属性。也就是说,系统根据一组或多组属性是否满足预设规则来动态的控制,谁可以访问哪些功能数据和操作。RBAC模型,其实可以看成是静态的、单组属性的ABAC模型。
用例子来理解这个模型就是:只有当用户角色为Admin,在工作时间内,且处在C栋大楼B实验室,才可以访问D文件。实际上,ABAC是个可以以最细颗粒度来管理权限的模型。它,可以让设计者,利用任何一个用户属性、环境属性,或者多个属性之间的交集、并集等来组合出动态的权限判断逻辑。