一. 开源产品
对开源的产品了解不多,所以也只能大概的谈谈,开源的产品中比较知名的有poweracl、acegi,poweracl从名字就可以看出其是基于ACL模型的,不怎么了解所以在此也不去评价了。
Acegi作为JAVA界知名的权限系统,从其文档看来是能满足上述的权限系统的所有需求,其reference文档也对权限系统进行了系统的归纳,非常的不错,建议去看看。
在Acegi中授权模型以及资源权限的校验仍然是基于RBAC模型,在数据权限方面也就是在reference文档中它称为Domain Object Instance的部分,是基于ACL模型的实现,曾经翻阅它此部分的代码,根据代码表现它并不支持Domain Object Instance的权限的继承,并且对于获取的Domain Object Instance也是没法采用分页的方式获取。
看了Acegi的代码觉得其授权应该是比较高效的,但在校验权限上效率恐怕也会比较的低,因为权限的继承是在校验权限通过递规来实现的,虽然引入了缓存机制但仍然无法从根本上解决此问题,而且此缓存的维护也不是一件容易的事。
但Acegi的优点也不可忽略,作为权限系统有一个很容易产生的问题就是对原有系统产生非常大的侵入,并最终导致原有系统与此权限系统形成了非常强的耦合,Acegi在这点上则做的比较好,通过使用Filter、Interceptor以及AOP Weaver技术来尽量保证对原有系统最少的改动。
二. 个人观点
权限系统作为各种系统中都需要的一个子系统,具有很广的需求面,无论做什么系统,首要重要的仍然是需求,尽管权限系统在各个系统中都有需求,但仍然是不尽相同,所以首先要明确所面对的系统到底是一个什么样的系统,对于权限有什么样的需求,根据需求可以根据相应的实现方案来做出自己的设计。
权限系统主要由授权和校验权限两大部分组成,授权效率和校验权限的效率通常会产生冲突,个人觉得首先要保证校验权限的效率,毕竟系统需要校验权限的地方会非常的多,但授权动作相对来讲触发的会比较的少。
从技术需求上来讲,权限系统对外部系统而言最好做到黑盒的效果,为了减少对外部系统的侵入,在根据业务需求分析的基础上形成权限系统的输入和输出需求,从通常的功能需求角度来大致的阐述:
1. 身份认证
在B/S结构的系统中通常通过增加Filter来达到实现身份认证的功能,这样不会造成对原有系统的改动。
2. 授权模型
授权模型则需外部系统根据此模型建立相应的授权UI以及交互,当然,权限系统本身也可提供默认的实现方式。
3. 资源权限校验
在资源权限的校验上可通过Proxy或Before Interceptor的方式来做到对资源操作的权限控制。
4. 数据权限校验
在很多时候需要区分好数据权限和业务逻辑,不要将业务逻辑形式的数据控制也借用数据权限来实现,数据权限的引入很容易对现有的系统模块造成影响,在此块的设计上要特别注意避免造成对原有系统模块过多的侵入。
5. 权限校验的体现
在权限校验的体现上基本主要是表现在菜单、按钮以及数据的显示上,菜单、按钮通常通过标签的方式来控制,数据的显示控制则需结合数据权限校验部分来实现。
到现在为止也做了几个权限系统了,目前仍然没做出让自己满意的权限系统,此文作为抛砖引玉的文章,也希望大家能够给出自己所做的解决方案。
三. 涉及的知识体系
根据上面的描述以及结合自己的经验,形成搭建权限系统所需的知识体系:
图表 6 权限系统知识体系
相关推荐
漫谈求生之路的AI系统
漫谈CRM体系化建设.pdf
很通俗地介绍《信号与系统》的一篇文章,我就喜欢这种通俗易懂的介绍高深原理的文章
01.漫谈兼容内核之一:Wine的系统结构.pdf 02.漫谈兼容内核之二:关于kernel-win32的对象管理.pdf 03.漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 04.漫谈兼容内核之四:Kernel-win32的进程管理.pdf 05.漫谈...
漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...
通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
漫谈CRM体系化建设5:CRM体系化解决方案.pdf漫谈CRM体系化建设5:CRM体系化解决方案.pdf漫谈CRM体系化建设5:CRM体系化解决方案.pdf漫谈CRM体系化建设5:CRM体系化解决方案.pdf漫谈CRM体系化建设5:CRM体系化解决...
漫谈CRM体系化建设5:CRM体系化解决方案.docx漫谈CRM体系化建设5:CRM体系化解决方案.docx漫谈CRM体系化建设5:CRM体系化解决方案.docx漫谈CRM体系化建设5:CRM体系化解决方案.docx漫谈CRM体系化建设5:CRM体系化...
谈兼容内核之一:ReactOS怎样实现系统调用.pdf 漫谈兼容内核之二:关于kernel -win32的对象管理.pdf 漫谈兼容内核之三:关于kernel-win32的文件操作.pdf 漫谈兼容内核之四:Kernel-win32的进程管理.pdf 漫谈兼容内核...
Java安全漫谈 - 01.反射篇(1)1
漫谈Wine之一:Wine的系统结构 漫谈Wine之一:Wine的系统结构
通向架构师的道路(第六天)之漫谈基于数据库的权限系统的设计
漫谈兼容内核之一:ReactOS怎样实现系统调用 漫谈兼容内核之二:关于kernel-win32的对象管理 漫谈兼容内核之三:Kernel-win32的文件操作 漫谈兼容内核之四:Kernel-win32的进程管理 漫谈兼容内核之五:Kernel-win32...
net 4.0面向对象编程漫谈 基础篇
漫谈CPU虚拟技术之Intel篇.pdf
关于漫谈高数的pdf文档,很好的关于数学本质问题的介绍。
系统与网络”是一个比“系统”与“网络”本身更为庞大复杂的论题,其内 容一本书也写不完。因此,这篇短文只可能对“系统与网络”漫谈几个零碎片断和 细小侧面,写下的基本上只是一些不成熟的个人见解,旨在分享
漫谈Wine之二:Windows的文件操作 漫谈Wine之二:Windows的文件操作
漫谈文化系统中的艺术.pptx
先说“卷积有什么用”这个问题。(有人抢答,“卷积”是为了学习“信号与系统”这门课的后续章节而存在的。我大吼一声,把他拖出去枪毙!)