Web OA系统 - 权限管理设计

转载 2011年01月21日 14:29:00

对某个模块的权限主要包括以下四种操作:

C----------Create添加

R----------Read读取

U----------Update更新(修改)

D----------Delete删除

权限管理模块中,这四个操作是由一个叫做Permission的类来表示的,它的属性只有由四个已定义好的常量 CREATE = 0  READ = 1  UPDATE = 2  DELETE = 3

 

下面主要是关于如何设置这四种操作的说明。

阐述几个变量的含义:

aclState-----表示授权状态,一个整型的最后四位表示,即含有哪几种操作的整形数值,存储在数据库中为32bit的整型变量

【由1248四个数字或他们某几个的和组成,可能的值有1~15

permission-----CRUD操作,只能取值0123其中之一

aclTriState-----继承的状态,0表示不继承,-1表示表示继承

【由于授权包括直接给用户授权和给角色授权,不继承表示直接授权、继承则表示用户拥有某些角色的授权】

ACL_YES-----授权允许

ACL_NO-----授权不允许

ACL_NEUTRAL-----授权不确定

【注:授权允许与否是指aclState的值中是否含有某种操作permissionCRUD)】

 

用于设置权限的ACL.java(访问控制列表Access Control List)类中的主要方法

/**

     * acl实例跟主体和资源关联(实际上就是设置aclState的值)

     * 针对此实例进行授权:某种操作是否允许

     * @param permission 只可以取值0,1,2,3

     * @param yes true表示允许,false表示不允许(添加还是不添加这其中某个操作C/R/U/D

     */

    public void setPermission(int permission, boolean yes){

       int tmp = 1;

       tmp = tmp << permission;

       if(yes){

           aclState |= tmp;

       }else{

           aclState &= ~tmp;

       }

    }

    /**

     * 获得ACL授权(根据permission判断aclState是否含有某个操作C/R/U/D

     * @param permission C/R/U/D权限

     * @return 授权标识:允许/不允许/不确定

     */

    public int getPermission(int permission){

       //如果继承(-1),则返回不确定的授权信息

       if(aclTriState == 0xFFFFFFFF) {

           return ACL_NEUTRAL;

       }

       int tmp = 1;

       tmp = tmp << permission;

       tmp &= aclState;

       if(tmp != 0) {

           return ACL_YES;

       }

       return ACL_NO;

    }

    /**

     * 设置本授权是否是继承的

     * @param yes true表示继承,false表示不继承

     */

    public void setExtends(boolean yes){

       if(yes){

           aclTriState = 0xFFFFFFFF;

       }else{

           aclTriState = 0;

       }

    }

分别解释上面三个方法

1setPermission(int permission, boolean yes)设置操作是否允许

即将传入的permission设置到aclState的值中:添加某操作还是去除某操作。

定义临时变量tmp=1,然后tmp左移permission位(0123位)

添加的话:aclState |= tmp;  aclStatetmp作或(|)运算并返回值

去除的话:aclState &= ~tmp;  aclStatetmp取反后作与(&)运算并返回值

例如:

若原来aclState的值为12(二进制即位1100,含有UD操作),现在若要添加R1

1.  tmp0001)左移1位,即现在tmp0010

2.  aclState1100)与tmp作或运算,即1100 | 0010 ,结果是1110,即为添加R操作后aclState的值了(十进制为13,加上了R操作)

若原来aclState的值为12(二进制即位1100,含有UD操作),现在若要去掉已有的U2

1.  tmp0001)左移2位,即现在tmp0100

2.  tmp取反后~tmp1101aclState1100)与1011做和运算,即1100 & 1011 ,结果为1000,即为去掉了U操作aclState的值(十进制为8,去掉了U操作)

2getPermission(int permission) 获得ACL授权

即根据permission判断aclState是否含有某个操作C/R/U/D),返回 允许/不允许/不确定 的整型值

1.  aclTriState-1,表示用户的授权时继承自角色的,故其是否含有permission操作不确定ACL_NEUTRAL

2.  aclTriState不为-1,表示用户的权限是直接授予的。定义临时变量tmp=1,将其左移permission位,并与aclState作与运算,判断其值是否为0:若不为0,则表示原aclState中含有传入的permission操作;若为0,则表示原aclState中不含有传入的permission操作。

例如:

若原来aclState的值为12(二进制即位1100,含有UD操作),现在若传入的permission2(即判断是否含有U操作),且是继承的。

1.  tmp0001)左移2位,即现在tmp0100

2.  tmpaclState1100)作与运算,即1100 & 0100  结果为0100(十进制为4),不为0,故此断定:值为12aclState必含有U2)操作。

若原来aclState的值为12(二进制即位1100,含有UD操作),现在若传入的permission1(即判断是否含有R操作),且是继承的。

       1t mp0001)左移1位,即现在tmp0010

2tmpaclState1100)作与运算,即1100 & 0010  结果为0000(十进制为0),为0,故此断定:值为12aclState必不含有R1)操作。

3setExtends(boolean yes) 设置本授权是否是继承的

是继承-----aclTriState设置为-1

不继承-----aclTriState设置为0

相关文章推荐

OA系统 权限管理的设计流程

权限 在系统中,权限通过模块+动作来产生,模块就是整个系统中的一个子模块,可能对应一个菜单,动作也就是整个模块中(在B/S系统中也就是一个页面的所有操作,比如“浏览、添加、修改、删除”等)。将模块与...

OA系统权限管理设计方案

(转)OA系统权限管理设计方案 - 游陆之家 Gis 之家 ArcGIS SuperMap MapGis ArcINfo 地理信息系统 - CSDN博客   2010-05-13 10:10:12|...

OA系统权限管理设计方案

  • 2013-06-07 17:11
  • 305KB
  • 下载

OA系统权限管理设计方案

  • 2011-09-16 16:37
  • 134KB
  • 下载

ASP.NET 权限管理 页面静态化 OA系统培训 三层架构

白菜价, 想要的联系QQ:867635458,非诚勿扰! ASP.NET MVC Linq 技术  企业级通用OA系统  全程开发  大型企业级...

OA系统权限管理设计方案

  • 2011-12-11 20:49
  • 305KB
  • 下载

OA系统权限管理设计方案

  • 2011-09-27 09:32
  • 134KB
  • 下载

使用拦截器或者AOP实现权限管理(OA系统中实现权限控制)

使用拦截器或者AOP实现权限管理(OA系统中实现权限控制)
  • canot
  • canot
  • 2016-02-08 21:22
  • 4918

OA权限管理系统

  • 2013-05-10 16:46
  • 3.75MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)