在系统的设计和应用中权限管理是不可缺少的一部分。随着系统的越来越复杂,使用系统的用户越来越多,对权限管理的设计和实现也要求越来越灵活。在我做的一个基于Struts+hibernate的Web应用中就遇到了这个问题。
在解决这个问题之前,我在网上搜索了相关的资料,有很多前辈提出了很好的解决方案和实现过程。可以参考如下网址的讨论内容:
http://blog.csdn.net/fswan/archive/2004/11/02/164063.aspx
http://dev.csdn.net/Develop/article/21/21673.shtm
http://www.jdon.com/jive/article.jsp?forum=46&thread=10122
http://tech.ccidnet.com/pub/article/c1077_a74011_p1.html
下面简单说明一下我做的项目的架构(这里假设您对Struts开发已经有一定的了解):系统中使用**PreAction和**ProcessAction类继承了struts的Action类,作为此系统的基类,所有需要使用Action类的地方都从这两个类进行派生,**PreAction类用于初始化页面,**ProcessAction用于处理页面的请求,而且每个页面都必须由**PreAction入,从**ProcessAction出,不允许直接访问Jsp页面。
结合我做的项目,我对权限设计进行了如下的划分:
1:)权限代码
在此系统中,我为每个功能点指定一个权限代码,这些功能点是系统可以完成的具体功能,例如页面上的每个链接和按钮它所执行的操作——添加、删除、修改、浏览、查询等功能。功能点和权限代码一一对应。它不同于资源,因为一个功能它可能利用了很多的资源。
2:)角色
它是权限代码的集合。例如系统管理员的角色,它可以拥有所有的权限。来宾的角色它拥有部分供来宾访问的权限。
角色与角色之间没有继承或依赖的关系,它们是并行的。
3:)用户组
它是角色的集合,一个用户组至少包含一个角色,同时也可能包含多种角色。例如,领导组可能包含来宾角色、普通用户角色等。用户组之间没有继承或依赖关系。
4)用户
用户隶属于某个或多个用户组。该用户拥有它隶属的用户组的所有权限,如果它属于多个用户组,那么它包含的权限是用户组权限之和。
按照上面的概念和原则进行了数据库的表设计:
PERMISSION——权限表
ROLE——角色表
ROLEPERMISSION——角色权限对应关系表
GROUP——用户组表
GROUPROLE——组角色对应关系表
USERGROUP——用户组的对应关系表
注意:用户表不再图中。
(未完待续。。。。)