什么是权限系统,权限系统究竟在整个系统中起到什么作用,或者说权限系统必须提供哪些功能?
谈谈个人的看法,我认为授权和验证是一个权限系统最基本的功能,而一个更完善的权限系统会增加上如何验证和验证后如何处理这两种功能。
对于一个权限系统的基本元素,我觉得只有两个:Principal(权限主体),权限。用户,用户组,角色等都可以抽象为权限主体这个概念;而权限则是资源+操作的抽象。权限可分为两种,一种纯粹就是资源,没有操作,也可以认为是默认操作;另外一种就是带操作的资源。授权本身没有什么说的,赋予权限主体权限;验证简单的说就是传入权限主体和当前操作需要的权限,然后验证返回说可以操作或是不可以操作yes/no。同时要注意的是验证的时候需要一个类(接口)来返回用户当前所拥有的权限,然后与当前操作需要的权限进行比对,最后返回比对结果。
以acegi为例,下面分开来说明:
首先,acegi是没有授权功能的,它简单把权限主体与资源配置在了xml里,当然这也带来了可扩展性,可以看一个配置:
xml 代码
- /index.jsp=ROLE_ANONYMOUS,ROLE_USER
- /hello.htm=ROLE_ANONYMOUS,ROLE_USER
- /logoff.jsp=ROLE_ANONYMOUS,ROLE_USER
- /switchuser.jsp=ROLE_SUPERVISOR
- /j_acegi_switch_user=ROLE_SUPERVISOR
- /acegilogin.jsp*=ROLE_ANONYMOUS,ROLE_USER
- /**=ROLE_USER
/index.jsp,/hello.htm这些URL都是资源,因为它默认的操作就是访问,所以访问特定URL就成了一个权限,ROLE_ANONYMOUS,ROLE_USER无疑就是权限主体。
Acegi对方法访问权限的配置也是和上面一样的。
然后,看看acegi的验证,其实它的验证就是一个个的Voter,当你访问一个方法时,由它获得当前用户和需要的权限(就是该
方法),然后返回yes/no。
OK,这就是一个完整的权限系统了。当然acegi如果仅仅提供上面两个基本功能,它是不会向现在这样成功的,它最大的亮点就是提供了如何验证和验证后如何处理这两种功能。对url它提供了filter,方法也一样提供了Interceptor,这就是如何验证,和我们在action里验证没有任何区别,只是换了一种方式而已。然后它验证后的处理方式:yes就继续往下执行,no就抛出异常最后再处理这个异常。我们在执行每个action前同样也可以做到这一点。
这里着重要提到的是数据权限。比如说A只能对部门A下的数据有查看权限,B可以对部门A的数据有修改权限和对部门B的数据的查看权限。
看起来这个需求是比较麻烦的,但是我们可以按上面说的拆分以下:
资源1:部门A下的数据 ;资源2:部门B下的数据
操作1:查看; 操作2:修改
产生四种权限:
权限1:资源1+操作1 ;权限2:资源1+操作2;权限3:资源2+操作1;权限4:资源2+操作2
权限主体A拥有权限:1 ; 权限主体B拥有权限:2,3
这样就非常清晰了。
总结:我始终认为拥有授权和验证功能就完成了一个完整的权限系统。至于如何去校验权限,不管你是filter还是aop那是具体实现时的细节,采取的不同策略。而验证后的处理则是和不同策略相对应的。在你考虑设计一个权限系统时首先考虑的是如何实现授权和验证,而不是一开始就考虑我是采取filter,还是aop,还是动态改变sql。
谢谢wolfsquare,它的blog相关
www.blogjava.net/wolfsquare/archive/2006/07/04/56606.html
分享到:
相关推荐
通用角色权限管理系统设计 因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计。 权限系统一直以来是我们应用系统不可缺少的一个部分,若每...
一个通用的数据权限管理系统的设计,一个doc文档,大家看了自己研究吧~
关于系统后台的用户权限设计与思考.docx
因为做过的一些系统的权限管理的功能虽然在逐步完善,但总有些不尽人意的地方,总想抽个时间来更好的思考一下权限系统的设计。 权限系统一直以来是我们应用系统不可缺少的一个部分,若每个应用系统都重新对系统的...
mvc 权限框架 带数据库 ,说道权限管理,相信大家都不太陌生,这个东西几乎什么系统都会涉及到,因此,抽出时间去思考,去研究复用的模块,架构,就是一个非常好的提升水平的方式,特别是对于我们这些学生来说,没有太多经验,...
此文主要想和大家分享的是这段时间,对权限管理和设计的断断续续的思考学习,和个人的一些软件开发等方面的看法。 提到’权限管理和设计’,大家可能会第一时间想到这园子里的 吉日嘎拉,在这方面他可以算是’大牛’...
课程设计 题目:在线考试系统设计与开发 "简介:目前国内基于B/S、C/S结构的在线考试系统产品已经有许多,本文首" "先介绍了这些考试系统的形成和发展过程,大致结构。然后通过仔细分析," "提出了目前的这些系统还...
毕业设计可以包括文献综述、需求分析、方案设计、实施与测试等多个阶段,以确保整个过程的科学性和系统性。 其次,毕业设计的完成通常需要学生具备一定的独立思考和解决问题的能力。在研究过程中,学生可能需要采用...
他们拥有对系统数据的录入、修改、查询、删除等操作权限。但不可以更 改系统密码。 上机人员:权限最低的登入人员,当上网时间到了之后就会被提示。 第三章 需求分析 一、主要功能: 完成网吧管理人员对上机人员的...
因此,在程序设计的时候必须树立以下观念:学习思考的方法比学习语言更重要,琢 磨程序设计的思维模式比琢磨C语言的知识更重要,培养自己的思考能力比记忆语言知识 更重要。 C语言程序设计的主要任务是要求我们遵循...
因此,设计并开发一款功能完善,权限分明,便于维护的校园招聘信息管理系统是具有一定深远意义的研究项目。 本文主要实现了社会人才的求职和各类企业的招聘。该系统开发主要基于Java,以Java开发语言为基础底层,...
毕业设计可以包括文献综述、需求分析、方案设计、实施与测试等多个阶段,以确保整个过程的科学性和系统性。 其次,毕业设计的完成通常需要学生具备一定的独立思考和解决问题的能力。在研究过程中,学生可能需要采用...
毕业设计是高等教育阶段学生在完成学业前所进行的一项重要学术任务,旨在检验学生通过学习所获得的知识、技能以及对特定领域的深刻理解能力。这项任务通常要求学生运用所学专业知识,通过独立研究和创新,完成一个...
毕业设计是高等教育阶段学生在完成学业前所进行的一项重要学术任务,旨在检验学生通过学习所获得的知识、技能以及对特定领域的深刻理解能力。这项任务通常要求学生运用所学专业知识,通过独立研究和创新,完成一个...
基于对现有产品的思考,结合J2EE的成熟技术,我们想到了是否可以将该技术运用在在线考试系统中,提出了一个基于J2EE架构的在线考试系统。通过将该架构与已有结构的在线考试系统进行比较,分析了该架构的优势,重点介绍...
毕业设计可以包括文献综述、需求分析、方案设计、实施与测试等多个阶段,以确保整个过程的科学性和系统性。 其次,毕业设计的完成通常需要学生具备一定的独立思考和解决问题的能力。在研究过程中,学生可能需要采用...
总体设计 2 概要设计 2 详细设计 3 调试分析 11 测试数据及截图 11 时间复杂度分析 15 问题思考 15 算法的改进设想 15 课设总结体会 15 附录 17 程序说明 17 源代码 17 主要参考文献 30 总体设计 通过此系统可以实现...
毕业设计是高等教育阶段学生在完成学业前所进行的一项重要学术任务,旨在检验学生通过学习所获得的知识、技能以及对特定领域的深刻理解能力。这项任务通常要求学生运用所学专业知识,通过独立研究和创新,完成一个...
在毕业设计的过程中我可能会遇到以下问题:对学生信息管理系统的具体工作内容思考不周全,对需求分析做得不到位。 解决方案:我正式在做毕业设计之前我去图书馆和上网查阅相关文献,并找相关有经验的人讨论,并依靠...