許可權管理系統中二進位制的運用
參考轉載自:https://www.cnblogs.com/zhaord/articles/4839877.html
二進位制的許可權管理基本運用到二進位制的位運算
位運算的內容:
或(|)運算的內容有: 1|1 =1 、1|0=1 、0|1=1、0|0=0. 通過或運算可以看出,只要有一個數位為1,那麼所求結果就為1.
與(&)運算的內容有: 1&1 =1 、1&0=0、0&1=0、0&0=0,通過與運算可以看出,只要有一數為0,那麼所求結果就為0.
求補(~)運算的內容有 ~1=0、~0=1,求補運算表面上看起來就是 1和0倒轉過來。
我們假設採用8位二進位制代表具體的許可權集合具體關係如下:
| 下載 | 列印 | 檢視 | 稽核 | 詳細 | 刪除 | 編輯 | 建立 |
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
如果某位為0,這表示沒有改操作許可權,如果為1,這表示具有該操作許可權,比如: 0000 0001 表示只有建立許可權、00100011這表示有建立、編輯、檢視著三種操作許可權,依次類推。
如果用一個整數來代表一個操作許可權的話,那麼
建立=1、編輯=2、刪除=4、詳細=8、稽核=16、檢視=32、列印=64、下載=128、全部=255(前面所有內容相加)、無=0。
那麼數字3(00000011)則表示有建立和編輯的許可權,13(00001101)折表示有詳細、建立、編輯這三種操作許可權。
1、授權操作
如果一個功能已經有了 建立和編輯的許可權,二進位制就是 0000 0011 ,這麼現在要新增一個檢視(0010 0000)許可權,授權之後的許可權的二進位制就為(0010 0011),通過2.1的內容可知,當
0000 0011
| 0010 0000
-----------------
0010 0011,
這樣就通過了或運算新增給原有的許可權新增一個新的許可權
2、取消授權操作
如果一個功能已經有了檢視、建立、編輯的許可權,二進位制就是 0010 0011 ,現在要求要取消編輯的許可權,取消授權之後的二進位制就是: 0010 0001 ,整個內容看起來就是對編輯位進行求反運算,那麼我們先看編輯許可權的求補運算的結果:
~ 0000 0010
----------------
1111 1101 ,
那麼求補的結果在和原有許可權進行和運算
(0010 0011)
& (1111 1101)
-----------------
(0010 0001) ,
這樣就得到了取消之後的二進位制 0010 0001(17)
3、許可權判斷
現在要判斷 0011 1100 這個代表的許可權操作中,有沒有稽核許可權(0001 0000),那麼我們對這兩個許可權進行 與運算
(0011 1100)
& (0001 0000)
-------------------------
(0001 0000),
判斷有沒有建立許可權(0000 0001),
(0011 1100)
& (0000 0001)
--------------------------
0000 0000,
也就是說,兩個許可權進行與運算,如果與運算的結果為0,則表示無該操作,反正,則表示具有該操作。
總結:
許可權操作基本分3部分 授權、取消授權與許可權判斷