惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Recent Commits to openclaw:main
Recent Commits to openclaw:main
U
Unit 42
WordPress大学
WordPress大学
Microsoft Azure Blog
Microsoft Azure Blog
Martin Fowler
Martin Fowler
人人都是产品经理
人人都是产品经理
Microsoft Security Blog
Microsoft Security Blog
T
The Blog of Author Tim Ferriss
博客园 - Franky
云风的 BLOG
云风的 BLOG
酷 壳 – CoolShell
酷 壳 – CoolShell
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Vercel News
Vercel News
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy & Cybersecurity Law Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
C
Cisco Blogs
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Spread Privacy
Spread Privacy
小众软件
小众软件
T
Threat Research - Cisco Blogs
Project Zero
Project Zero
博客园 - 三生石上(FineUI控件)
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
The Hacker News
The Hacker News
F
Fortinet All Blogs
Security Latest
Security Latest
Cisco Talos Blog
Cisco Talos Blog
The GitHub Blog
The GitHub Blog
Stack Overflow Blog
Stack Overflow Blog
T
The Exploit Database - CXSecurity.com
量子位
Blog — PlanetScale
Blog — PlanetScale
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
P
Proofpoint News Feed
G
GRAHAM CLULEY
D
DataBreaches.Net
P
Privacy International News Feed
Y
Y Combinator Blog
Simon Willison's Weblog
Simon Willison's Weblog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
I
InfoQ
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recent Announcements
Recent Announcements
P
Proofpoint News Feed

博客园 - 涤生

Enterprise Library Caching Application Block(CAB)源代码研究之缓存条目清理后台线程篇 了解ASP.NET底层架构(网络上的翻译) EditPlus中的正则表达式使用--如何使用查找到的原字符 Spring.Net学习笔记一——入门、第一个例子 CodeSmith4.0.2连接SqlServer2005――不允许远程连接 many2many的写法与注意点 Nhibernate继承类的写法 One2One主键关联的实现 NHibernate基础学习时遇到的问题 NHibernate学习之一:Many2One遇到的问题 自动提取网页的信息 ,并分析之 权限学习--BlueDavy之技术Blog漫谈权限系统之结尾篇(开源产品、个人观点、知识体系) 权限设计学习篇--BlueDavy之技术Blog - 漫谈权限系统之技术策略以及基于RBAC ... 权限设计-之学习篇--来源于BlueDavy之技术Blog Oracle数据库发生Ora-12162错误 Linux下Oracle文件的自动备份与ftp自动上传 BugFree安装手记 CodeSmith3.0x中Oracle的访问 Asp.Net StartKits之Asp.Net Issue Tracker Starter Kit-数据库
权限学习--BlueDavy之技术Blog漫谈权限系统之基于ACL的实现
涤生 · 2006-09-02 · via 博客园 - 涤生

基于ACL的实现

ACL介绍

       ACL全称Access Control List,在ACL中,包含用户(User)、资源(Resource)、资源操作(Operation)三个关键要素。通过将资源以及资源操作授权给用户而使用户获取对资源进行操作的权限,模型如下图所示:

acl.JPG
图表
1 ACL模型

实现方案

       通过上面对ACL模型的介绍,可以看出ACL是个简单的模型,但其并未提出对于权限的继承、权限的排斥和包含的解决方案。

       ACL模型得到接受必然也是有它的理由的,现在来看看基于ACL模型如何来实现授权模型和权限校验部分。

l         授权模型

授权模型遵循ACL模型进行搭建,建立ACL介绍中的模型。

针对授权模型中的几个关键部分进行描述:

n         授权

根据ACL模型,授权动作主要经过以下几个步骤完成:

u       配置系统资源和资源的操作

按照模型维护ResourceOperation实体以及ResourceOperation的关联模型即可实现。

u       授予用户能操作的资源和资源的操作

按照模型维护用户与Resource以及Operation的关联即可实现。

n         权限的继承

ACL模型中未定义权限的继承,这也是由于在ACL的模型中根本就没有权限继承的点,因为用户本身是不可能继承的。

在很多改良的ACL模型系统中,会通过给组或组织机构授权来完成,这时就出现了权限继承的点了,如组或组织机构的权限继承,那么在ACL模型中如何去实现这个权限继承呢?

为实现给组或组织机构进行授权,此时通常需要对上述ACL模型进行改造方可实现,模型重构如下:

acl2.JPG
图表
2 重构后的ACL模型

在对组或组织机构进行授权动作时,经过以下步骤来实现权限的继承:

u       维护当前组或组织机构中所有用户的ACL模型

维护当前组或组织机构和ResourceOperation的关联模型。

递规获取当前组或组织机构的父节点的ACL模型,并合并形成新的ResourceOperation关联列表,此时获取该组或组织机构中的用户产生用户和ResourceOperation的关联ACL模型。

u       维护当前组或组织机构中所有下级节点中的所有用户的ACL模型

递规获取当前组或组织机构的子节点,同时合并形成子节点新的ResourceOperation关联列表,之后获取子节点中的用户产生新的ResourceOperation关联列表。

在经过以上的步骤后权限的继承得以实现,在使用过程中同时发现另外一个问题,在更新组或组织机构下的用户时需要同时维护当前组或组织机构的ACL模型,否则会造成不同步的问题。

n         权限的排斥和包含

权限的排斥和包含在ACL模型中同样没有定义,通常的实现方法是定义Operation的自关联,维护时需增加对Operation自关联的维护以及在维护UserResourceOperation关联时根据Operation的自关联产生其包含权限的ACL列表。

l         资源权限校验

在以上授权模型的基础上,对于操作主体能否对资源进行操作权限的判断通过ACL列表直接判断用户是否具有对资源进行操作的权限即可。

通常在中小型系统的做法是在用户登录时获取构成用户的ACL列表,以提升资源权限校验的效率。

l         数据权限校验

ACL模型中未明确定义数据权限校验的实现,根据数据权限校验的需求将数据映射为Resource,对数据的操作映射为Operation,这个时候数据权限的授权模型重构为:

dataacl.JPG
图表
3 数据权限的ACL模型

       基于此模型对数据权限的授权和权限校验进行描述:

n         授权

在对数据进行授权时根据模型此时的授权对象主要有UserGroup两种,授权时需要通过以下步骤来完成:

u       维护数据本身构成的ACL模型

维护当前数据、操作与GroupUser的关联模型。

递规获取当前数据、操作的父节点的GroupUser的关联模型,合并组成新的GroupUser列表,根据此列表形成对当前数据进行操作的用户列表,此时更新形成UseràResourceàOperationACL列表模型。

u       维护数据所有子节点的ACL模型

递规获取数据的所有子节点,同时对合并形成每个子节点的新的GroupUser列表,更新子节点的UseràResourceàOperationACL列表模型。

在经过以上的步骤后数据权限的继承以及需求得以实现,在使用过程中同时发现另外一个问题,在更新组或组织机构下的用户时需要同时维护当前组或组织机构的ACL模型,否则会造成不同步的问题。

n         权限校验

u       获取操作者权限范围内的全部数据

直接通过UseràResourceàOperationACL列表获取所有数据。

u       分页获取操作者权限范围内的数据

直接通过UseràResourceàOperationACL列表分页(结合数据库的分页技术)获取数据。

优缺点分析

       经过上述实现方案的描述,可以看出基于ACL的实现的优点主要在于:

n         易用和高效的权限校验

在进行资源和数据的权限校验时只需通过通过ACL列表即可实现。

       缺点在于:

n         权限的继承

对权限继承不够支持。

n         复杂和低效的授权方式

在进行资源和数据的授权时非常复杂,特别是在加入权限的继承、排斥和包含后,需要在维护本身ACL列表的同时维护所有子节点的ACL列表,导致效率低下。