基於二進位制許可權管理

2021-09-01 23:06:29 字數 1717 閱讀 6880

1、許可權值的設定

用二進位制來表示許可權值應該是按位來設定,每個位佔乙個,表示一種許可權,如:

00000001表示十進位制1, 

00000010表示十進位制2, 

00000100表示十進位制4, 

00001000表示十進位制8;

依次類推,才能清晰正確的標識,多種許可權的賦予則使用「或運算」,此時各位比較混亂,如00000011表示十進位制3,此時它意味著擁有兩種許可權。

long userrolevalue ;//使用者的許可權值,根據他屬於的許可權組,這個值會不同

long oprolevalue   ;//乙個操作的許可權值,根據他屬於的許可權組,這個值會不同

2、許可權的賦予(或運算)

userrolevalue = userrolevalue | oprolevalue

假設乙個使用者u1,他的初始許可權值為0(00000000)。如果要指定他有經理的許可權,經理的許可權值為4(00000100),在第三個二進位制位為1。

很顯然,userrolevalue =  0 | 4 ,值為4,如果u1要同時具有文員、主管、經理的許可權呢,

userrolevalue = 0 | 1   00000000 | 00000001  = 00000001

userrolevalue = 1 | 2   00000001 | 00000010  = 00000011

userrolevalue = 3 | 4   00000011 | 00000100  = 00000111

這樣,第1、2、3位都是1了,用 「或」的好處就是只改變指定位的值,如果使用者已經有了該許可權,直接簡單的用加法來做會出錯,而用"或"再賦予一次,也不會出錯,如下:

userrolevalue = 7 | 4   00000111 | 00000100  = 00000111

3、許可權的除去(求補、與運算)

userrolevalue = userrolevalue & (~oprolevalue)

假設乙個使用者u1,他的初始許可權值為7(00000111),說明他能做文員、主管、經理許可權組所能作的所有操作。如果不想讓他有主管許可權組能作的操作呢,那麼,就要把他的許可權值變為00000101,而主管許可權組的許可權值是00000010,顯然簡單的用減法,肯定也是不行的,但是先對00000010作補運算,可以得到11111101,再同00000111作與運算,就得到了00000101,這樣就只對第二位作了改變,不會影響到其它位,我們的目的也就達到了。

對於乙個操作,哪些許可權組能操作它,也可以用與運算來做,不讓某些許可權組有些操作的許可權,也可以先求補,再作與運算來解決。

4、許可權的驗證(與運算)

(userrolevalue & oprolevalue) != 0表示擁有oprolevalue所表示許可權

例如:現有乙個使用者user的許可權為6(00000110),通過&(與)運算,使用公式 "(user的許可權 & 許可權值) != 0" 即可判斷擁有某個許可權值表示的許可權----6 & 2 == 2 (00000110 & 00000010 == 00000010),表示user擁有主管許可權;6 & 4 !=0 (00000110 & 00000100 == 00000100) ,表示user擁有經理許可權;6 & 1 == 0(00000110 & 00000001 == 00000000),表示user無文員許可權;  

二進位制許可權

package test 二進位制許可權使用 許可權 0 表示所有許可權 1 新增 0001 2 修改 0010 4 刪除 0100 8 檢視 1000 如 10 十進位制的 10 不是二進位制的 1 代表的許可權是 修改和檢視許可權 public class bitpermission 是否含有許...

基於二進位制的許可權管理與驗證

1 許可權值的設定 用二進位制來表示許可權值應該是按位來設定,每個位佔乙個,表示一種許可權,如 00000001表示十進位制1,00000010表示十進位制2,00000100表示十進位制4,00001000表示十進位制8 依次類推,才能清晰正確的標識,多種許可權的賦予則使用 或運算 此時各位比較混...

轉 用二進位制進行許可權管理

直接給例子吧!例子中將講解 1.許可權表示 2.許可權判斷 3.新增許可權 4.取消許可權public class test else 3333 給使用者新增許可權用使用者許可權和要新增的許可權 按位或 操作再覆蓋之前許可權值 if userb u u else 給使用者b新增更新許可權 userb...