最后,我定义了一个Permission类把所有的元素连接起来形成一个完整权限判断组件。代码如下。用户继承该类时要完两个方法getDenyRule,getAcceptRule即可。 
     
    当我们进行权限判断时只要调用hasPermission(User user,HashMap oldData,Input input)即可。其后三个参数分别为用户,数据,输入。用户为在判断的人,数据为原有数据,比较进行更新操作时,oldData为老数据,input在前一部分有介绍,为一个通用的输入方式。比WEB输入Post或Get方式等,可以转换成一个Input类,也可以手动新建一个Input.为操作以及其数据的集合。 
    在Permission类中进行了DenyRule和AcceptRule的判断,只要有一个DenyRule规则符合要求,则认为该用户无权限进行操作,如果用户的没被DenyRule排除则进行AcceptRule的判断,只要有一个规则符合要求则认为该用户有权限。 
  
    因为本人比较懒所以Permission的实现还没有写出一个通用的。 
     
    综上所述,使用此权限组件要进行以下几项工作: 
1、 编写User的实现。 
2、 编写Group的实现。 
3、 编写Role的实现。 
4、 编写Permission的实现。(过段时间我会摆个通用的上来) 
5、 编写N个Rule(同你的系统要进行权限判断相对应)。 
6、 在程序中调用Permission.hasPermission判断。 
  
  
  
  
======================Permission.java=============================== 
package org.fswan.permission; 
  
import java.util.ArrayList; 
import java.util.HashMap; 
import org.fswan.Input; 
  
/** 
 * 权限判断类 
 */ 
public abstract class Permission 
{ 
    public String permission; 
    public String subPermission; 
    protected ArrayList prop; 
    public boolean hasPermission(User user,HashMap oldData,Input input) 
    { 
      Rule[] rules = getDenyRule(); 
        boolean accept = true; 
       for (int i = 0; i < rules.length; i++) 
       { 
           if(!rules[i].pass(this,user,oldData,input)) 
           { 
               accept = false; 
               break; 
           } 
       } 
        if(accept)return false; 
       rules = getAcceptRule(); 
       for (int i = 0; i < rules.length; i++) 
       { 
           if(!rules[i].pass(this,user,oldData,input)) 
           return false; 
       } 
        return true; 
    } 
    public String getPermissionName() 
    { 
        if(subPermission==null)return permission; 
        return permission+":"+subPermission; 
    } 
    public ArrayList getPermissionItem() 
    { 
        return prop; 
    } 
    public abstract Rule[] getDenyRule(); 
    public abstract Rule[] getAcceptRule(); 
} 
   
 
  |