找到一篇关于权限设计的教程,写的很好,但是发现给出的代码,有些地方可能有笔误。贴出来供大家和我一起学习。
-----------------------------------
首先,设置三种要素:用户、群组、角色。
用户为登录用,对应到人。群组对应为用户的集合,是一种特殊的用户。角色为一组权限项的集合,用户(群组)都有各自的角色。
权限的实现通过Permission类和Rule类来实现。 Permission供外部调用,Rule为一个接口,为权限判断规则。
Permission是一个抽象类,有以下方法
代码
- publicbooleanhasPermission(Useruser,HashMapoldData,Inputinput);
- publicStringgetPermissionName();
- publicabstractRule[]getDenyRule();
- publicabstractRule[]getAcceptRule();
render_code();
hasPermission方法供外部调用,已实现,实现方法为:
先根据getDenyRule()得到的规则判断权限是否被阻拦,
再根据getAcceptRule()来判断是否有权限。
而Rule接口的接品则由用户自行定义,随包附带了一个已实现的Rule,实现的功能如下:
先寻找User的所有角色,然后判断角色是否有权限,如果无权限则寻找其父级群组,再取父级群组的所有角色进行判断是否有权限,如果无权限则再往上级群组找,直到找最上一级还是无权限才判断为无权限。
现实现判断权限有无权限的方式已可以达成的有以下三种:
1、 是否有操作的权限。
2、 是否有操作的子操作的权限。
3、 在数据为某条件时有操作(子操作)的权限。
在进行程序开发时,
第一步,编写User,Group,Role的实现类,已提供了一套XML的实现类。
第二步,写配置文件,进行权限项的配置。
第三步,在程序中要进行权限判断的地方调用Permission.hasPermission方法即可。
用户组件
首先,我定义了一个用户接口,可以从其中取出其的各种属性.代码如后面所示.用户除了各种不同的属性以外,还必须设置其角色以及所属的群组.然后 定义一个AbstractUser把User共性的东西进行处理.所有的取属性的方法都已实现.用户只要根据实现情况继承AbstractUser把自己 要定义的属性进行处理即可.(因为每个系统的用户都会有不同的属性,所以留成抽象类供使用者自己扩展). 只要初始化变量description, name ,group ,id, prop,role,propMap即可.最后定义了一个类UserImpl来实现具体的User作随包的一个User供一般使用者使用.不建议直接使用 UserImpl,因为以后的版本可能会重写该类.如果要使用的话可以把该类改名为自己的类即可.这部分涉及到了一个ResourceLib类,该类中存 是我自己定义的存储各种资源配置用的类,可以直接使用.
========================XML格式=====================
代码
- <Userid="U01">
- <Name>Swan</Name>
- <Description>方志文</Description>
- <ParentGroupid="G01"/>
- <Propertyname="SEX"value="male"/>
- <Propertyname="AGE"value="20"/>
- </User>
render_code();
========================XML描述文件==================
代码
- <xs:complexTypename="User">
- <xs:annotation>
- <xs:documentation>用户名</xs:documentation>
- </xs:annotation>
- <xs:sequence>
- <xs:elementname="Name"/>
- <xs:elementname="Description"/>
- <xs:elementname="ParentGroup"type="Identity"minOccurs="0"maxOccurs="unbounded"/>
- <xs:elementname="Role"type="Identity"minOccurs="0"maxOccurs="unbounded"/>
- <xs:elementname="Property"minOccurs="0"maxOccurs="unbounded">
- <xs:complexType>
- <xs:attributename="name"use="required"/>
- <xs:attributename="value"use="required"/>
- </xs:complexType>
- </xs:element>
- </xs:sequence>
- <xs:attributename="id"use="required"/>
- </xs:complexType>
render_code();
群组组件
首先,我定义了一个群组接口,除了继承用户的方法以外还有两个方法,getUsers,getSubGroup.代码如后面所示.用户除了各种不 同的属性以外还必须设置其角色以及所属的群组.然后定义一个AbstractGroup,他继承了Group以及AbstractUser,并实现了 Group接口定义的两个方法.用户只要根据实现情况继承AbstractGroup把自己要定义的属性进行处理即可.(因为每个系统的用户都会有不同的 属性,所以留成抽象类供使用者自己扩展). 只要初始化变量description, name ,group ,id, prop,role,propMap,subGroup,user即可.最后定义了一个类XMLGroup来实现具体的Group作随包的一个Group 供一般使用者使用.不建议直接使用XMLGroup,因为以后的版本可能会重写该类.如果要使用的话可以把该类改名为自己的类即可.这部分涉及到了一个 ResourceLib类,该类中存是我自己定义的存储各种资源配置用的类,可以直接使用.
========================XML格式=====================
代码
- <Groupid="G01">
- <Name>系统部</Name>
- <Description>系统部</Description>
- </Group>
render_code();
========================XML描述文件==================
代码
- <xs:complexTypename="Group">
- <xs:annotation>
- <xs:documentation>群组</xs:documentation>
- </xs:annotation>
- <xs:complexContent>
- <xs:extensionbase="User">
- <xs:sequence>
- <xs:elementname="SubGroup"type="Identity"minOccurs="0"maxOccurs="unbounded"/>
- <xs:elementname="User"type="Identity"minOccurs="0"maxOccurs="unbounded"/>
- </xs:sequence>
- </xs:extension>
- </xs:complexContent>
- </xs:complexType>
render_code();
首 先,我定义了一个角色接口,可以从其中取出其的各种属性.代码如后面所示.然后定义一个AbstractRole把Role共性的东西进行处理.所有的取 属性的方法都已实现.用户只要根据实现情况继承AbstractRole把自己要定义的属性进行处理即可.(因为每个系统的用户都会有不同的属性,所以留 成抽象类供使用者自己扩展). 只要初始化变量description, name ,id, prop,users(可能是群组), permissionMap即可.最后定义了一个类XMLRole来实现具体的Role作随包的一个Role供一般使用者使用.不建议直接使用 XMLRole,因为以后的版本可能会重写该类.如果要使用的话可以把该类改名为自己的类即可.这部分涉及到了一个ResourceLib类,该类中存是 我自己定义的存储各种资源配置用的类,可以直接使用.
========================XML格式=====================
代码
- <Roleid="R01">
- <Name>系统管理员</Name>
- <Description>系统管理员</Description>
- </Role>
render_code();
========================XML描述文件==================
代码
- <xs:complexTypename="Role">
- <xs:annotation>
- <xs:documentation>角色名</xs:documentation>
- </xs:annotation>
- <xs:sequence>
- <xs:elementname="Name"/>
- <xs:elementname="Description"/>
- <xs:elementname="Property"minOccurs="0"maxOccurs="unbounded"/>
- </xs:sequence>
- <xs:attributename="id"use="required"/>
- </xs:complexType>
render_code();
规则
定义好User,Group,Role了以后,下面我定义了权限判断的规则.首先定义Rule接口,见Rule.java.Rule只做一件事判断User是否有权限.
然后我实现了一个Rule,见RuleImpl.java.这部分涉及到了一个Input类,这个类是一个输入的类,接口如Input.java.这个通过继承该接口可以使用各种方式数据(HTTP,XML,SOAP……)作为输入数据.
Permission为权限类,下面一篇会介绍.
权限
最后,我定义了一个Permission类把所有的元素连接起来形成一个完整权限判断组件。代码如下。用户继承该类时要完两个方法 getDenyRule,getAcceptRule即可。 当我们进行权限判断时只要调用hasPermission(User user,HashMap oldData,Input input)即可。其后三个参数分别为用户,数据,输入。用户为在判断的人,数据为原有数据,比较进行更新操作时,oldData为老数据,input在 前一部分有介绍,为一个通用的输入方式。比如WEB输入Post或Get方式等,可以转换成一个Input类,也可以手动新建一个Input.为操作以及 其数据的集合。 在Permission类中进行了DenyRule和AcceptRule的判断,只要有一个DenyRule规则符合要求,则认为该用户无权限进行操 作,如果用户的没被DenyRule排除则进行AcceptRule的判断,只要有一个规则符合要求则认为该用户有权限。 因为本人比较懒所以Permission的实现还没有写出一个通用的。 综上所述,使用此权限组件要进行以下几项工作:
1、 编写User的实现。
2、 编写Group的实现。
3、 编写Role的实现。
4、 编写Permission的实现。(过段时间我会摆个通用的上来)
5、 编写N个Rule(同你的系统要进行权限判断相对应)。
6、 在程序中调用Permission.hasPermission判断。
其它原意是给大家看一下结构,没想大家都那么关心,我现在把所有的代码贴上来,谢谢大家关心.唉,BLOG好烦啊,无法直接上传文件要一个一个贴
#############源代码单独整理了。可能有一些地方笔误了。是原来的教程原因。代码在附件中######
src.rar |
描述: |
|
 下载 |
文件名: |
src.rar |
文件大小: |
13 KB |
下载过的: |
文件被下载或查看 922 次 |
声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。若作者同意转载,必须以超链接形式标明文章原始出处和作者。
分享到:
相关推荐
这是一个找到一篇关于权限设计的教程,写的很好,但是发现给出的代码,有些地方可能有笔误。贴出来供大家和我一起学习。 首先,设置三种要素:用户、群组、角色。 用户为登录用,对应到人。群组对应为用户的集合,是...
这个打包的资源包含了五个相关的文档和教程,旨在深入探讨权限设计的相关概念和技术。以下是这些文件所涵盖的主要知识点: 1. **java用户角色权限设计.doc**: 这个文档可能涉及到Java编程语言中的权限控制机制,...
本文将深入探讨C#中的权限设计及其应用,并结合提供的资源——一个PPT和实例教程,帮助读者理解和掌握这一核心概念。 首先,权限设计的基本理念是根据用户的角色或身份来确定他们对系统资源的访问权限。在C#中,...
总之,"c#开发之权限设计"是一个涵盖面广泛的课题,涉及到从代码级别的访问控制到整个系统级别的权限策略。通过学习这个资源,开发者不仅可以提升C#编程技能,还能增强在实际项目中构建安全、可控的系统的实践能力。
也可以把同一个人分配到不同的权限组,具有多个权限组的权限,实现权限的组合。 本套教程通过c-s和b-s两种模式讲解,如果没有学过winform开发的学员可以通过本套教程补充下winform开发知识,以桌面程序的方式实现...
为CXF服务器端添加自定义拦截器进行权限检查【】HTML网页设计教程第一章(概论)1【】HTML网页设计教程第一章(概论)2【】HTML网页设计教程第一章(概论)3【】HTML网页设计教程第一章(概论)4【】HTML网页设计...
"lesson_xml_pm3"可能是一个关于Oracle权限设计的课程或教程文件,可能包含了具体的案例、练习或脚本,用于帮助学习者理解和实践Oracle权限设计的方法。通过学习这个资源,你可以更深入地了解如何在实际环境中设计和...
本教程——"sql数据库设计教程",旨在帮助初学者以及有一定基础的学习者深化对SQL数据库的理解,提升设计能力。以下是本教程可能涵盖的一些核心知识点: 1. 数据库基础知识:首先,教程会介绍数据库的基本概念,...
综上所述,《数据库设计教程(第二版)》这本书可能会涵盖以上提到的所有方面,为读者提供从理论到实践全面深入的学习资料。对于想要深入了解数据库设计的人来说,本书无疑是一个宝贵的学习资源。
这份教程涵盖了从基本概念到高级技术的广泛内容,旨在提供一个清晰的学习路径,让读者能够逐步掌握Windows程序设计的核心技能。 首先,Windows程序设计的基础是理解Windows操作系统的工作原理。Windows程序设计主要...
在这个CMS项目中,权限设计是一个关键部分。通常,权限管理涉及用户角色、权限分配、访问控制等方面。源码可能会包含如下的设计: 1. **用户管理**:包括用户注册、登录、密码找回等功能,可能使用了身份验证...
数据库是一个组织和存储数据的系统,它允许用户高效地检索、更新和管理数据。常见的数据库类型包括关系型数据库(如MySQL、Oracle)、非关系型数据库(如MongoDB、Cassandra)和分布式数据库等。 在数据库系统中,...
1. **MVC4权限设计简要说明.doc** - 这份文档可能会概述在MVC4框架下设计权限系统的基本概念和步骤,包括角色、权限分配、访问控制列表(ACL)等。 2. **管理账户密码.txt** - 可能介绍了如何在系统中创建、修改和...
在这个视频教程的第15讲中,我们可能会深入探讨如何构建一个安全、高效的权限管理系统。SSH框架在企业级应用开发中广泛使用,因为它们提供了模型-视图-控制器(MVC)架构、对象关系映射(ORM)以及动作层的封装,极...
首先是单例模式,它保证一个类只有一个实例,并提供一个全局访问点。这种模式在需要控制资源的全局唯一性时非常有用,比如线程池或者数据库连接。 接着是工厂模式,它是创建型模式中最基础的一种,通过抽象出一个...
ASP.NET 2.0是微软开发的一个用于构建Web应用程序的框架,它是在.NET Framework 2.0版本上运行的。这个“ASP.NET 2.0程序设计案例教程”旨在为学习者提供深入理解和实践ASP.NET技术的机会。通过课件的形式,我们可以...
本教程聚焦于Java平台上的权限管理系统设计与实现,特别是基于Spring Security框架的ACL(Access Control List,访问控制列表)机制。下面将详细阐述相关知识点。 一、Java权限管理基础 1. 权限管理:权限管理是...
1. **EPLAN平台介绍**:EPLAN提供了一个统一的工程设计平台,支持多用户协作,具备强大的电气原理图绘制、设备管理、线缆布线、项目管理等功能。学习之初,会介绍EPLAN的基本界面和工作流程。 2. **基础操作**:...
在Java Web中,Spring MVC是一个常见的实现框架,它简化了开发过程,提供了强大的依赖注入和AOP(面向切面编程)功能。 此外,教程可能会介绍JDBC(Java Database Connectivity),它是Java与数据库交互的标准API。...
《Unix程序设计教程源码》是一本针对初学者与进阶者精心编写的教程,旨在帮助读者深入理解和掌握Unix系统下的程序设计。该教程与经典的《Unix高级环境编程》相媲美,涵盖了从基础概念到高级技巧的广泛内容。通过学习...