尚学堂OA系统中ACL的CRUD解释

尚学堂OA系统中ACL 中用 int 表示权限是什么意思
一个 int 有32 位,用后4位表示CRUD 操作,位的取值1或0表示授权或不授权

 

/**
  * acl实例跟主体和资源关联
  * 针对此实例进行授权:某种操作是否允许
  * @param permission 只可以取值0,1,2,3
  * @param yes true表示允许,false表示不允许
  */
 public void setPermission(int permission,boolean yes){
  int tmp = 1;
  //tmp的二进制形式向左移动permission个单位
  //这样经过移动的结果会有四种情况: C:0001 R:0010 U:0100 D:1000
  tmp = tmp << permission;
  if(yes){
   //如果是授权,则把原有的权限与当前的权限相加,二进制用"|"
   aclState |= tmp;
  }else{
   //如果是减去授权,则当前传进来的权限取反,再与原有的权限"&"
   aclState &= ~tmp;
  }
 }
 
 /**
  * 获得ACL授权(获得C/R/U/D的权限是否允许或是否确定)
  * @param permission C/R/U/D权限
  * @return 授权标识:允许/不允许/不确定
  */
 public int getPermission(int permission){
  
  //如果继承,则返回未定的授权信息
  if(aclTriState == 0xFFFFFFFF){
   return ACL_NEUTRAL;
  }
  
  int tmp = 1;
  
  tmp = tmp << permission;
  //只要C/R/U/D中不全部为没有权限(0000),那么与刚刚传入的权限相"&"是不会出现等于0的.
  tmp &= aclState;
  
  if(tmp != 0){
   return ACL_YES;
  }
  
  return ACL_NO;
 }

  


从你上面的意思看
0001为十进制的1:拥有C权限;
0010为十进制的2:拥有R权限;
0100为十进制的4:拥有U权限;
1000为十进制的8:拥有D权限;
也就是用最后四位来表示CRUD的权限,1表示允许,0表示不允许。
那么,
CRUD的权限就是1111,也就是十进制的15;
减少一个D操作也就是减少8,为7
如果再加上一个D操作,那么就加上8,又为15了.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值