來源: 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型。其運算結果如下所示: