來源:http://zxlovenet.cnblogs.com在許可權分配中有多個許可權級別,不同用戶分別有多個不同的許可權。論壇的許可權:查看、發帖、投票、搜索用戶的許可權:用戶A:查看、發帖用戶B:查看用戶C:查看、發帖、投票、搜索分析:有四種不同的許可權級別,總共2^4種許可權分配方式。像這樣許可權等級劃分和...
來源: http://zxlovenet.cnblogs.com
在許可權分配中有多個許可權級別,不同用戶分別有多個不同的許可權。
論壇的許可權:
查看、發帖、投票、搜索
用戶的許可權:
用戶A:查看、發帖
用戶B:查看
用戶C:查看、發帖、投票、搜索
分析:
有四種不同的許可權級別,總共2^4種許可權分配方式。
像這樣許可權等級劃分和不同級別用戶的許可權分配採用二進位方式許可權分配驗證方式是最好的選擇。即每一個操作許可權都用一個二進位數表示(1、10、100、1000)。總共的許可權種類有2^n種,n即代表許可權類別。在C#中long類型有64位,所以總共有64類許可權,2^64種許可權分配方式。許可權的分配、刪除、查看都採用二進位運算實現。
long userrolevalue;//用戶的操作許可權
long oprolevalue;//一個操作的許可權
1.許可權的分配(或運算)
userrolevalue = userrolevalue | oprolevalue
(00001110)2=(00000010)2|(00000100)2|(00001000)2
2、許可權的刪除(求補、與運算)
userrolevalue = userrolevalue & (~oprolevalue)
3、許可權的驗證(與運算)
(userrolevalue & oprolevalue) == oprolevalue
(00000101)2 &( 00000011)2 ==(00000001)2
如果通過驗證則具有相應類別的許可權。
此驗證方法,還可以用在菜單許可權的驗證上來。根據要劃分的許可權等級數量可以選擇相應的數據類型,比如int類型預設的是32位的,short是16位的。
附:邏輯(布爾型)運算符用於對bool型的結果的表達式進行運算,運算的結果都是bool型。其運算結果如下所示:
運算符 | 運算 | 例子 | 結果 |
& | AND(與) | false&true | FALSE |
| | OR(或) | false|true | TRUE |
^ | XOR(異或) | false^true | TRUE |
! | NOT(非) | !false | TRUE |
&& | AND(短路) | false&&true | FALSE |
|| | OR(短路) | false||true | TRUE |