一种基于Struts框架的RBAC实现 - 编程入门网
库设计
RBAC中用户、角色和权限关系应该存储在数据库中。在实施验证时,可以根据发出请求的用户(通常在用户登录时由系统保存)查找其角色和权限信息。 数据库中需要以下几个表: (1) 用户表:OA_USER{id,Sys_Name,Password,other user infomation}。 (2) 角色表:OA_ROLE{id,Role_Name,other role infomation}。 (3) 权限表:OA_POWER{id,Power_Name,other power information}。 (4) 用户-角色表:OA_USER_ROLE{id,User_id,Role_id}。 (5) 角色-权限表:OA_ROLE_POWER{id,Role_id,Power_id}。 我们不采用将URL资源及对应权限关系存放于数据库的方式,以减少权限审查时数据库访问次数。 4.2 URL请求的设计 考虑到可能有多种操作请求通过同一个Action转发,我们规定在URL中添加请求参数,以表明它所指向的Action以及操作形式。具体形式可以这样:*.do?actionType=ProjectDelete,其中actionType参数的值即表明了操作形式。对于针对相同Action的请求,由于可以使用actionType参数加以区分,因此这种方式可以解决URL粒度太粗的问题。 一种基于Struts框架的RBAC实现(3)时间:2011-10-074.3 struts-config.xml的设计 由于URL资源与权限的映射关系没有存放于数据库,而这种映射关系又是权限审查时的重要依据,因此必须解决映射关系的存储问题。通过分析,我们发现,之所以需要知道URL与权限的映射关系,本质上是为了反映这样一个问题:每个Action都需要知道它的actionType与哪一个权限对应。也就是说,如果我们让Action知道了它的actionType所对应的权限也就解决了URL资源与权限的映射关系。 为实现上述目标,struts-config.xml需要做如下配置:
配置Action时,对于需要进行权限审查的Action,可以配置其Parameter属性,以“actionType(Power_Name)”形式保存actionType与权限的映射关系,多个actionType与权限的映射可以用分号作为分隔。当请求指向Action时,可以获取并分析Parameter参数值,用以完成权限审查。 4.4 权限验证算法的设计 首先,既然系统中大部分的Action都需要进行形式相似的权限验证,其中必然存在可复用的设计。结合面向对象的思想,我们可以设计一个基类Action,不妨取名为BaseAction,在该Action中封装权限审查逻辑,系统中所有需要进行权限审查的Action,都可以从该类继承,由此天生具有了权限审查能力。这样,我们就实现了权限审查逻辑的集中管理,便于系统的维护。 BaseAction类设计如下:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |