基於二進位制的許可權管理與驗證
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 是否含有許...
二進位制許可權控制
在許可權分配中有多個許可權級別,不同使用者分別有多個不同的許可權。論壇的許可權 檢視 發帖 投票 搜尋 使用者的許可權 使用者a 檢視 發帖 使用者b 檢視 使用者c 檢視 發帖 投票 搜尋 分析 有四種不同的許可權級別,總共2 4種許可權分配方式。像這樣許可權等級劃分和不同級別使用者的許可權分配採...
Chmod 二進位制許可權
linux 許可權預設使用 rwx 來表示,為了更簡化在系統中對許可權進行配置和修改,linux許可權引入二進位制表示方法,如下 linux 許可權可以將 rwx 用二進位制來表示,其中有許可權用 1 表示,沒有許可權用 0 表示 linux 許可權用二進位制顯示如下 rwx 111 r x 101...