原文地址:http://www.coin163.com/java/docs/201309/d_2820039104.html
ACL 介绍
ACL 全称 Access Control List ,在 ACL 中,包含用户 (User) 、资源 (Resource) 、资源操作 (Operation) 三个关键要素。通过将资源以及资源操作授权给用户而使用户获取对资源进行操作的权限,模型如下图所示:
用户资源操作
图表 1 ACL 模型
实现方案
通过上面对 ACL 模型的介绍,可以看出 ACL 是个简单的模型,但其并未提出对于权限的继承、权限的排斥和包含的解决方案。
ACL 模型得到接受必然也是有它的理由的,现在来看看基于 ACL 模型如何来实现授权模型和权限校验部分。
l 授权模型
授权模型遵循 ACL 模型进行搭建,建立 ACL 介绍中的模型。
针对授权模型中的几个关键部分进行描述:
n 授权
根据 ACL 模型,授权动作主要经过以下几个步骤完成:
u 配置系统资源和资源的操作
按照模型维护 Resource 、 Operation 实体以及 Resource 与 Operation 的关联模型即可实现。
u 授予用户能操作的资源和资源的操作
按照模型维护用户与 Resource 以及 Operation 的关联即可实现。
n 权限的继承
在 ACL 模型中未定义权限的继承,这也是由于在 ACL 的模型中根本就没有权限继承的点,因为用户本身是不可能继承的。
在很多改良的 ACL 模型系统中,会通过给组或组织机构授权来完成,这时就出现了权限继承的点了,如组或组织机构的权限继承,那么在 ACL 模型中如何去实现这个权限继承呢?
为实现给组或组织机构进行授权,此时通常需要对上述 ACL 模型进行改造方可实现,模型重构如下:
用户资源操作2
图表 2 重构后的 ACL 模型
在对组或组织机构进行授权动作时,经过以下步骤来实现权限的继承:
u 维护当前组或组织机构中所有用户的 ACL 模型
维护当前组或组织机构和 Resource 、 Operation 的关联模型。
递规获取当前组或组织机构的父节点的 ACL 模型,并合并形成新的 Resource 、 Operation 关联列表,此时获取该组或组织机构中的用户产生用户和 Resource 、 Operation 的关联 ACL 模型。
u 维护当前组或组织机构中所有下级节点中的所有用户的 ACL 模型
递规获取当前组或组织机构的子节点,同时合并形成子节点新的 Resource 、 Operation 关联列表,之后获取子节点中的用户产生新的 Resource 、 Operation 关联列表。
在经过以上的步骤后权限的继承得以实现,在使用过程中同时发现另外一个问题,在更新组或组织机构下的用户时需要同时维护当前组或组织机构的 ACL 模型,否则会造成不同步的问题。
n 权限的排斥和包含
权限的排斥和包含在 ACL 模型中同样没有定义,通常的实现方法是定义 Operation 的自关联,维护时需增加对 Operation 自关联的维护以及在维护 User 、 Resource 、 Operation 关联时根据 Operation 的自关联产生其包含权限的 ACL 列表。
l 资源权限校验
在以上授权模型的基础上,对于操作主体能否对资源进行操作权限的判断通过 ACL 列表直接判断用户是否具有对资源进行操作的权限即可。
通常在中小型系统的做法是在用户登录时获取构成用户的 ACL 列表,以提升资源权限校验的效率。
l 数据权限校验
在 ACL 模型中未明确定义数据权限校验的实现,根据数据权限校验的需求将数据映射为 Resource ,对数据的操作映射为 Operation ,这个时候数据权限的授权模型重构为:
用户资源操作
图表 3 数据权限的 ACL 模型
基于此模型对数据权限的授权和权限校验进行描述:
n 授权
在对数据进行授权时根据模型此时的授权对象主要有 User 、 Group 两种,授权时需要通过以下步骤来完成:
u 维护数据本身构成的 ACL 模型
维护当前数据、操作与 Group 、 User 的关联模型。
递规获取当前数据、操作的父节点的 Group 、 User 的关联模型,合并组成新的 Group 、 User 列表,根据此列表形成对当前数据进行操作的用户列表,此时更新形成 UseràResourceàOperation 的 ACL 列表模型。
u 维护数据所有子节点的 ACL 模型
递规获取数据的所有子节点,同时对合并形成每个子节点的新的 Group 、 User 列表,更新子节点的 UseràResourceàOperation 的 ACL 列表模型。
在经过以上的步骤后数据权限的继承以及需求得以实现,在使用过程中同时发现另外一个问题,在更新组或组织机构下的用户时需要同时维护当前组或组织机构的 ACL 模型,否则会造成不同步的问题。
n 权限校验
u 获取操作者权限范围内的全部数据
直接通过 UseràResourceàOperation 的 ACL 列表获取所有数据。
u 分页获取操作者权限范围内的数据
直接通过 UseràResourceàOperation 的 ACL 列表分页 ( 结合数据库的分页技术 ) 获取数据。
优缺点分析
经过上述实现方案的描述,可以看出基于 ACL 的实现的优点主要在于:
n 易用和高效的权限校验
在进行资源和数据的权限校验时只需通过通过 ACL 列表即可实现。
缺点在于:
n 权限的继承
对权限继承不够支持。
n 复杂和低效的授权方式
在进行资源和数据的授权时非常复杂,特别是在加入权限的继承、排斥和包含后,需要在维护本身 ACL 列表的同时维护所有子节点的 ACL 列表,导致效率低下。
分享到:
相关推荐
存储ACL,并在内核中安插钩子函数实现资源访问控制,根 据用户指定方式或默认方式,阻止非授权主体访问客体,并控 制访问权限扩散。访问控制的粒度是单一主体,没有访问权的 主体只允许由授权主体指定对客体的访问权...
在网络设计中,既考虑信息资源的充分共享,更要注意信息的保护和隔离,因此系统 应分别针对不同的应用和不同的网络通信环境,采取不同的措施,包括端口隔离、路由 过滤、防DDoS拒绝服务攻击、防IP扫描、系统安全机制...
Telnet:远程登录访问协议,使其他跨省区域的子公司通过远程访问总部的内外,在远 程访问时,会设置相应的ACL认证和相对的权限设置。 SNMP网络管理协议:SNMP 用于在 IP 网络管理网络节点(服务器、工作站、路由器...
其中,智能体之间的协 调和协作是多智能体系统中的核心问题,有效的协调与协作方法是多智能体系统中的主 要设计内容。 8.1.1 智能体之间的通信机制 为了进行协调和协作,智能体之间需要彼此通信、交换信息。目前,...
用java进行客户端的applet (小程序)开发的技术已广为使用,而用java进行服务器端的servlet(服务器小程序)开发则尚需揭开其神秘的面纱,本书正是基于这样的目的编写的。全书从java服务器的体系结构、开发工具和...
JavaBaas 是基于Java语言开发的后台服务框架,其核心设计目标是实现移动... Note: 稳定版下载地址主要功能 结构化数据存储 物理文件存储 ACL权限管理机制 用户系统 消息推送 标签:JavaBaas J2EE框架
Zookeeper只能存储信息不大于1M的内容,Fourinone超过1M的内容会以内存隐射文件存储,增强了它的存储功能,简化了Zookeeper的ACL权限功能,用更为程序员熟悉rw风格取代,简化了Zookeeper的临时节点和序列节点等类型...
Zookeeper只能存储信息不大于1M的内容,Fourinone超过1M的内容会以内存隐射文件存储,增强了它的存储功能,简化了Zookeeper的ACL权限功能,用更为程序员熟悉rw风格取代,简化了Zookeeper的临时节点和序列节点等类型...
15. 基于表达式的权限控制 15.1. 概述 15.1.1. 常用内建表达式 15.2. Web 安全表达式 15.3. 方法安全表达式 15.3.1. @Pre 和 @Post 注解 15.3.1.1. 访问控制使用 @PreAuthorize 和 @PostAuthorize ...
15. 基于表达式的权限控制 15.1. 概述 15.1.1. 常用内建表达式 15.2. Web 安全表达式 15.3. 方法安全表达式 15.3.1. @Pre 和 @Post 注解 15.3.1.1. 访问控制使用 @PreAuthorize 和 @PostAuthorize 15.3.1.2. ...
15. 基于表达式的权限控制 15.1. 概述 15.1.1. 常用内建表达式 15.2. Web 安全表达式 15.3. 方法安全表达式 15.3.1. @Pre 和@Post 注解 15.3.1.1. 访问控制使用@PreAuthorize 和@PostAuthorize 15.3....
ASP.NET 始终使用特定的 Windows 标识运行,因此,您可以通过使用 Windows 功能(例如 NTFS 访问控制列表 (ACL)、数据库权限等等)来保护应用程序的安全。有关 ASP.NET 标识的更多信息,请参见配置 ASP.NET 进程标识...
四、在Vista系统中安装IIS7.0相对于早先的版本,IIS 7.0 带来了许多引人注目的新特色新功能,比如基于 Microsoft .NET Framework 的全局配置文件,可简单地通过文本编辑器或 Microsoft Visual Studio 编辑;...