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

推荐订阅源

The GitHub Blog
The GitHub Blog
P
Privacy International News Feed
博客园_首页
Hugging Face - Blog
Hugging Face - Blog
A
About on SuperTechFans
量子位
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
雷峰网
雷峰网
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
V
V2EX
Recent Announcements
Recent Announcements
博客园 - 叶小钗
B
Blog RSS Feed
Apple Machine Learning Research
Apple Machine Learning Research
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
C
Check Point Blog
N
Netflix TechBlog - Medium
Y
Y Combinator Blog
P
Proofpoint News Feed
T
The Blog of Author Tim Ferriss
D
DataBreaches.Net
月光博客
月光博客
Engineering at Meta
Engineering at Meta
博客园 - 【当耐特】
Martin Fowler
Martin Fowler
小众软件
小众软件
博客园 - 司徒正美
大猫的无限游戏
大猫的无限游戏
爱范儿
爱范儿
M
MIT News - Artificial intelligence
G
Google Developers Blog
MyScale Blog
MyScale Blog
Google DeepMind News
Google DeepMind News
D
Docker
有赞技术团队
有赞技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
Recorded Future
Recorded Future
I
InfoQ
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
美团技术团队
Vercel News
Vercel News
GbyAI
GbyAI
aimingoo的专栏
aimingoo的专栏
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
WordPress大学
WordPress大学

博客园 - 涤生

Enterprise Library Caching Application Block(CAB)源代码研究之缓存条目清理后台线程篇 了解ASP.NET底层架构(网络上的翻译) EditPlus中的正则表达式使用--如何使用查找到的原字符 Spring.Net学习笔记一——入门、第一个例子 CodeSmith4.0.2连接SqlServer2005――不允许远程连接 many2many的写法与注意点 Nhibernate继承类的写法 One2One主键关联的实现 NHibernate基础学习时遇到的问题 NHibernate学习之一:Many2One遇到的问题 自动提取网页的信息 ,并分析之 权限学习--BlueDavy之技术Blog漫谈权限系统之基于ACL的实现 权限设计学习篇--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漫谈权限系统之结尾篇(开源产品、个人观点、知识体系)
涤生 · 2006-09-02 · via 博客园 - 涤生

一.  开源产品

对开源的产品了解不多,所以也只能大概的谈谈,开源的产品中比较知名的有poweraclacegipoweracl从名字就可以看出其是基于ACL模型的,不怎么了解所以在此也不去评价了。

Acegi作为JAVA界知名的权限系统,从其文档看来是能满足上述的权限系统的所有需求,其reference文档也对权限系统进行了系统的归纳,非常的不错,建议去看看。

Acegi中授权模型以及资源权限的校验仍然是基于RBAC模型,在数据权限方面也就是在reference文档中它称为Domain Object Instance的部分,是基于ACL模型的实现,曾经翻阅它此部分的代码,根据代码表现它并不支持Domain Object Instance的权限的继承,并且对于获取的Domain Object Instance也是没法采用分页的方式获取。

看了Acegi的代码觉得其授权应该是比较高效的,但在校验权限上效率恐怕也会比较的低,因为权限的继承是在校验权限通过递规来实现的,虽然引入了缓存机制但仍然无法从根本上解决此问题,而且此缓存的维护也不是一件容易的事。

Acegi的优点也不可忽略,作为权限系统有一个很容易产生的问题就是对原有系统产生非常大的侵入,并最终导致原有系统与此权限系统形成了非常强的耦合,Acegi在这点上则做的比较好,通过使用FilterInterceptor以及AOP Weaver技术来尽量保证对原有系统最少的改动。

二.  个人观点

权限系统作为各种系统中都需要的一个子系统,具有很广的需求面,无论做什么系统,首要重要的仍然是需求,尽管权限系统在各个系统中都有需求,但仍然是不尽相同,所以首先要明确所面对的系统到底是一个什么样的系统,对于权限有什么样的需求,根据需求可以根据相应的实现方案来做出自己的设计。

权限系统主要由授权和校验权限两大部分组成,授权效率和校验权限的效率通常会产生冲突,个人觉得首先要保证校验权限的效率,毕竟系统需要校验权限的地方会非常的多,但授权动作相对来讲触发的会比较的少。

从技术需求上来讲,权限系统对外部系统而言最好做到黑盒的效果,为了减少对外部系统的侵入,在根据业务需求分析的基础上形成权限系统的输入和输出需求,从通常的功能需求角度来大致的阐述:

1.         身份认证

B/S结构的系统中通常通过增加Filter来达到实现身份认证的功能,这样不会造成对原有系统的改动。

2.         授权模型

授权模型则需外部系统根据此模型建立相应的授权UI以及交互,当然,权限系统本身也可提供默认的实现方式。

3.         资源权限校验

在资源权限的校验上可通过ProxyBefore Interceptor的方式来做到对资源操作的权限控制。

4.         数据权限校验

在很多时候需要区分好数据权限和业务逻辑,不要将业务逻辑形式的数据控制也借用数据权限来实现,数据权限的引入很容易对现有的系统模块造成影响,在此块的设计上要特别注意避免造成对原有系统模块过多的侵入。

5.         权限校验的体现

在权限校验的体现上基本主要是表现在菜单、按钮以及数据的显示上,菜单、按钮通常通过标签的方式来控制,数据的显示控制则需结合数据权限校验部分来实现。

到现在为止也做了几个权限系统了,目前仍然没做出让自己满意的权限系统,此文作为抛砖引玉的文章,也希望大家能够给出自己所做的解决方案。

三.  涉及的知识体系

根据上面的描述以及结合自己的经验,形成搭建权限系统所需的知识体系:

权限系统.jpg
图表
6 权限系统知识体系