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