论坛首页 Java企业应用论坛

基于webwork拦截器的权限设计

浏览 3728 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-12-08   最后修改:2008-12-25
前段时间逛javaeye获得灵感,部分重新设计了公司项目的权限功能(如有雷同纯属巧合),现在在博客里总结一下。
原理是利用webwork拦截器拦截action,但细节处千差万别,下面看看我的。

先假设一个场景:
1、表单A有CRUD4个操作,分别对应4个权限。
2、每个操作分别对应若干action,如Create操作里包括Aaction、Baction。
3、当用户拥有C权限时,他应该能执行Aaction、Baction。

下面是我的实现:
1、将用户权限放在用户表的权限字段中,如放入字符串“C-R-U-D”。

2、新建一个Purview类,是一个普通java类用于设置权限。如:
public class Purview{
	private Boolean create;
	private Boolean retrieve;
	private Boolean update;
         ……	
	public Boolean getCreate() {
		return create;
	}	
	public void setCreate(Boolean create) {
		this.create = create;
	}
	……		
}


3、用户登录时,根据权限字段中的记录,将Purview类中的属性设为true,然后将设置好的Purview类放入session中。如:
String yhql = yonghu.getLanaction();//lanaction是权限字段
String[] lanac;
	if(StringHelper.isNotEmpty(yhql)){
		Purview purview = new Purview();
		lanac = yhql.split("-");
		for(int i=0,len=lanac.length; i<len; i++){
			if(lanac[i].equals("C")){
				purview.setCreate(true);
			}
			else if(lanac[i].equals("R")){
				purview.setRetrieve(true);
			}
			……		
            }
             Map map = ActionContext.getContext().getSession();
	    map.put("quanli", purview);
	}


4、当用户执行某个action时,拦截器从session中获取当前用户权限,判断其是否具有访问权限。如:
if(purview!=null){//purview为从session中获取的Purview类	
       if(action instanceof RenAction){//action为Aaction对应的Action类
	 if(actionName.equals("Aaction")//actionName为xml里的action名 
                  || actionName.equals("Baction") ){
			if(!purview.getCreate()){
			throw new Exception("对不起,您没有此权限");
			}
		}
	 else if(actionName.equals("Caction")){
		    if(!purview.getRetrieve()){
		         throw new Exception("对不起,您没有此权限");
			}
		}
                ……
                   ……

大概先写这么多吧。
   发表时间:2008-12-09  
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框?
0 请登录后投票
   发表时间:2008-12-09  
basibasi 写道
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框?


看楼主的意思,应该是根据Map里面的权限值来控制,如果不具有权限的话就不能看到页面上的按钮。
0 请登录后投票
   发表时间:2008-12-09  
basibasi 写道

楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框?

弹出“无权限”的提示。
0 请登录后投票
   发表时间:2008-12-09  
hdragonh 写道

basibasi 写道
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框? 看楼主的意思,应该是根据Map里面的权限值来控制,如果不具有权限的话就不能看到页面上的按钮。


我没有用到Map。目前也还没实现没有权限就看不到页面上的某个按钮。
5 请登录后投票
   发表时间:2008-12-09  
唯快不破 写道
hdragonh 写道

basibasi 写道
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框? 看楼主的意思,应该是根据Map里面的权限值来控制,如果不具有权限的话就不能看到页面上的按钮。


我没有用到Map。目前也还没实现没有权限就看不到页面上的某个按钮。

用jsp tag实现
0 请登录后投票
   发表时间:2009-03-16  
xly_971223 写道
唯快不破 写道
hdragonh 写道

basibasi 写道
楼主:如果用户能访问某个页面,但是对页面上的某个按钮没有权限。那么是这个按钮不显示还是点击按钮是弹出“无权限”的对话框? 看楼主的意思,应该是根据Map里面的权限值来控制,如果不具有权限的话就不能看到页面上的按钮。


我没有用到Map。目前也还没实现没有权限就看不到页面上的某个按钮。

用jsp tag实现



怎么用,最多也就是解决了粗粒度权限。比如说,不同模块有不同权限,如何处理?
最简单的也是最常见的,记录级别的权限,以及字段级别的就无能为例了

比如:一个单据,需要总经理看全部,部门经理看部门,员工看自己。。。你总不能在满页面的写<c:if 吧????
0 请登录后投票
   发表时间:2009-03-16  
这只是 C R U D
但是,如有个导出 或者导入 之类的操作
或者 上传 等呢?这还不止 。。。。
这样的话你这个就有点行不通了,
权限权限不只是控制CRUD
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics