`
唯快不破
  • 浏览: 81995 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

基于webwork拦截器的权限设计

阅读更多
前段时间逛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("对不起,您没有此权限");
			}
		}
                ……
                   ……

大概先写这么多吧。
分享到:
评论
7 楼 zhenjia 2009-03-16  
这只是 C R U D
但是,如有个导出 或者导入 之类的操作
或者 上传 等呢?这还不止 。。。。
这样的话你这个就有点行不通了,
权限权限不只是控制CRUD
6 楼 vtrtbb 2009-03-16  
xly_971223 写道
唯快不破 写道
hdragonh 写道

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


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

用jsp tag实现



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

比如:一个单据,需要总经理看全部,部门经理看部门,员工看自己。。。你总不能在满页面的写<c:if 吧????
5 楼 xly_971223 2008-12-09  
唯快不破 写道
hdragonh 写道

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


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

用jsp tag实现
4 楼 唯快不破 2008-12-09  
hdragonh 写道

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


我没有用到Map。目前也还没实现没有权限就看不到页面上的某个按钮。
3 楼 唯快不破 2008-12-09  
basibasi 写道

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

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


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

相关推荐

Global site tag (gtag.js) - Google Analytics