云题海 - 专业文章范例文档资料分享平台

当前位置:首页 > 权限管理设计

权限管理设计

  • 62 次阅读
  • 3 次下载
  • 2025/5/4 10:55:19

一、什么是权限管理

场景举例--限于功能访问权限

1,给张三赋予“人力资源经理”角色,“人力资源经理”具有“查询员工”、“添加员工”、“修改员工”和“删除员工”权限。此时张三能够进入系统,则可以进行这些操作; 2,去掉李四的“人力资源经理”角色,此时李四就不能够进行系统进行这些操作了。 以上举例,局限于功能访问权限。

场景举例--限于数据操作权限

1,因为张三是北京分公司的“人力资源经理”,所以他能够也只能够管理北京分公司员工和北京分公司下属的子公司(海淀子公司、朝阳子公司、西城子公司、东城子公司等)的员工;

2,因为王五是海淀子公司的“人力资源经理”,所以他能够也只能够管理海淀子公司的员工;

3,普通审查员审查财务数据的权限是:在零售行业审核最高限额是¥50万,在钢铁行业最高限额是¥1000万;高级审查员不受该限额限制;

4,ATM取款每次取款额不能超过¥5000元,每天取款总额不能超过¥20000元。 这些权限管理和数据(可以统称为资源)直接相关,又称为数据级权限管理、细粒度权限管理或者内容权限管理。 二、都有哪些权限

从控制力度来看,可以将权限管理分为两大类: 1,功能级权限管理; 2,数据级权限管理。

从控制方向来看,也可以将权限管理分为两大类: 1,从系统获取数据,比如查询订单、查询客户资料; 2,向系统提交数据,比如删除订单、修改客户资料。 三、权限技术实现

功能权限管理技术实现(RBAC)

权限设置:

权限验证:

对于WEB系统,一般定义一个Filter就可以完成权限验证,无需在各个程序入口进行权限判断。程序伪代码如下: // 获取访问功能

String url=request.getRequestPath(); // 进行权限验证

User user=request.getSession().get(\ boolean permit=PrivilegeManager.permit( user, url );

if( permit ) {

chain.doFilter( request, response ); } else {

// 可以转到提示界面

}

数据权限管理技术实现(Ralasafe)

1,硬编码,也就是将这种逻辑以if/else等形式与业务代码耦合在一起,这种情况居多; 2,使用规则引擎,也有一些企业将这种逻辑以规则形式提出来,并使用规则引擎解析规则;

3,使用第三方专业软件,有开源中间件Ralasafe;开源框架Spring Security;商业产品Oracle Entitlements Server,IBM Tivoli Access Manager。 四、权限的具体实现模式(http://www.blogjava.net/metadmin)

模式一:用户->角色->权限(最通用的方法)

1, 数据库结构

权限表:id,name,url,description| pk(id) 角色表:id,name,description| pk(id)

角色-权限关系表:roleId,privilegeId| pk(roleId,privilegeId)

用户-角色关系表:userId,roleId|pk(userId,roleId)

2, 在控制层写if/else判断条件

用户登入系统后,就通过其角色加载所有可以访问的页面,保存到 Session, 一直到用户退出系统或者 session 过期。用户访问页面时,添加一个 Dispatcher ( tapestry5 方式),在这个 Dispatcher中解析出页面地址如 /cs/deposit ,和用户保存在 Session 里的可访问页面作比较,如果存在则继续,不存在则跳到登入页面。

模式二:Ralasafe第三方组件(图形界面的形式,简单易用)

安装、配置与使用手册:http://www.ralasafe.org/zh/guide/index.html

Ralasafe,是采用Java语言开发的轻量级数据级权限管理中间件。解开权限与业务的耦合,采用全景式、图形化管理方式,无需大量Java和XML开发配置。

Ralasafe将权限分为两大类

查询权限:用户从系统获取数据,此时系统根据用户不同,返回该用户具有权限查询的数据 决策权限:用户向系统提交操作数据(如:修改、添加或者删除某订单),此时系统根据用户和被操作数据,判断是否允许操作

权限层级分为两大类

功能级权限,又称操作权限,使用角色模型足够

数据级权限,支持数据行级、列级,又称内容权限,细粒度权限

Ralasafe专注于数据级权限,使用策略机制进行管理。Ralasafe也提供了功能级权限实现,该功能可选,并不耦合。

Ralasafe系统架构

安全引擎,该引擎解析授权策略,对所有访问进行过滤。从2个方向进行控制: 从系统获取数据,比如查询订单,查询客户资料

向系统提交数据,比如修改某订单,删除某客户资料

管理界面,通过管理界面IT管理员可以轻松管理、设计授权策略,并在线仿真测试。 Ralasafe是服务,而不是框架。对应用程序没有要求,也不需要修改业务数据库。Ralasafe的结构性数据与业务数据独立保存在数据库,非结构性数据保存在文件系统,方便移植。

模式三:注解和拦截器实现权限通用模型的设计

使用这种设计方案,可以很好地分离权限与系统本身的功能,让开发过程更加关注系统的核心功能,同时可以很容易做到开发时的任务划分,同时使项目代码的可读性大大提升。

权限模型的常量定义:

一个系统里最常见的需求莫过于权限、角色,我们需要两个类,一个表明都有什么权限(例如:删除帖子权限、编辑帖子权限,等等);另一个类表明,各个角色都有什么权限。这样子相当于定义了一个权限和角色模型。

拦截器与注解:

拦截器(Invocation)在在流行的开源框架中很常见,依赖的技术就是Java的动态代理。许多流行的框架都提供实现拦截器的接口,可以很简单就实现一个拦截器,此文不表如何实现。注解(Annotations)是JAVA在5.0后引入的特性,它引入的目的是为了替代一些简单的配置到java代码里,而不用原来的xml。

注解请求示例:

一般的框架,都会有一个controller类,以下用伪代码表示: public class ThreadsController{

@PriCheckRequired({MemberPrivilegeIdentity.CREATE_THREAD}) public String createThread(){ return \} }

如代码中所示,一个controller里的一个method对应一个url请求(例中所示为创建帖子)。我们只需要在其方法上标注@PriCheckRequired({MemberPrivilegeIdentity.CREATE_THREAD}),PriCheckRequired就是注解,其传递了一个信息MemberPrivilegeIdentity.CREATE_THREAD,这也就是前文说的权限类中的创建帖子权限。

可以想像在拦截器里要做的事情:

拦截器一般都是实现一个框架提供的接口来实现,常用框架都支持。 1.根据规定好的request请求的参数,取到用户属于哪个角色。 2.根据controller中注解,取到当前要判断的权限。

3.对比用户角色是否有注解中的权限,如果有,放行,反之拦截。

具体的实现过程:

拦截器的代码实现与框架有关:rose框架如何实现拦截器请看

http://code.google.com/p/paoding-rose/wiki/Rose_Code_Fragment_Interceptor

模式四:基于webwork和过滤器实现无代码侵入的原子级界面权限

在我们开发产品或项目的过程中,经常会遇到的用户关于对界面权限控制的需求,如一个审批表单,由基本字段和审批意见等字段组成,用户要求不同角色进入页面时,对页面中不同的输入框有不同的权限,例如申请人只能填写基本信息的输入框,对于审批意见的输入框是

只读的,而审批人进入相同的页面时,可以在审批意见的输入框中填写意见。这是一个最简单的业务需求。

通常我们实现这样的需求时,需要在我们的页面中嵌入N多的if...else来实现对输入框的状态进行控制,导致了权限逻辑和页面展现混在一起,显得极其臃肿。我在使用webwork的过程中,通过对webwork源代码的深入了解,想到了修改webwork的基类UIBean来实现页面的权限控制:

1、首先将页面的权限定义保存到数据库或xml的配置文件中;

2、编写一个监听器LoadPagePermissionListener来从权限的描述文件中,加载权限信息到缓存;

3、编写页面权限过滤器,例如PagePermissionFilter,实现对页面请求的过滤; 4、当用户请求一个web表单时,首先通过.action去请求,此时.action被

PagePermissionFilter过滤器拦截到,此过滤器中从用户所请求的web表单对应的XML权限描述文件或数据库中取得此web表单中所有HTML控件的权限集合,并将此集合传递给webwork的控制器,最后到webwork的HTML控件生成器的父类UIBean,由UIBean去render我们请求的表单中的所有HTML控件,这render之前,我们通过改写这个UIBean,使其在render每个控件之前,先从我们的权限集合中取出这个控件的权限(可编辑、只读、可视、不可视)进行设定,然后根据设定的权限进行渲染,最后我们看到的就是一个经过权限过滤的界面了,并且这个表单对于用户完全是透明的,开发人员不用添加任何关于表单控件权限的代码!

5、等等,到此并没有结束,由于webwork对于Select框、radio框、checkbox框等的只读显示状态并不能满足用户的需求,例如对于select框,用户要求只读状态时,不显示边框,只显示实际的字段值,呵呵,此时怎么办?没关系,见如下代码: if (\

if (template.equals(\template.equals(\ template = \ }

if (template.equals(\ template = \ } }

也就是说,在只读权限时,我们直接替掉webwork默认的freemarker模板,自己写一个freemarker模板,例如我自己写了一个hidder4select的模板,实现select框在只读状态时,只显示字段值。到此为止我们完全实现了无任何代码侵入的页面原子级的权限控制

搜索更多关于: 权限管理设计 的文档
  • 收藏
  • 违规举报
  • 版权认领
下载文档10.00 元 加入VIP免费下载
推荐下载
本文作者:...

共分享92篇相关文档

文档简介:

一、什么是权限管理 场景举例--限于功能访问权限 1,给张三赋予“人力资源经理”角色,“人力资源经理”具有“查询员工”、“添加员工”、“修改员工”和“删除员工”权限。此时张三能够进入系统,则可以进行这些操作; 2,去掉李四的“人力资源经理”角色,此时李四就不能够进行系统进行这些操作了。 以上举例,局限于功能访问权限。 场景举例--限于数据操作权限 1,因为张三是北京分公司的“人力资源经理”,所以他能够也只能够管理北京分公司员工和北京分公司下属的子公司(海淀子公司、朝阳子公司、西城子公司、东城子公司等)的员工; 2,因为王五是海淀子公司的“人力资源经理”,所以他能够也只能够管理海淀子公司的员工; 3,普通审查员审查财务数据的权限是:在零售行业审核最高限额是¥50万,在钢铁行业最高限额是¥1000万;高级

× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:10 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219
Copyright © 云题海 All Rights Reserved. 苏ICP备16052595号-3 网站地图 客服QQ:370150219 邮箱:370150219@qq.com