尚學堂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了.

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章