源**github:
第一章主要是介紹了這個demo的來由和主要使用的技術,這章內容主要是介紹如何通過二進位制的位運算進行許可權控制的內容。
基於二進位制的許可權管理,這個內容是我在兩年前接觸到過的乙個知識,在這裡重溫一下。
用二進位制進行許可權管理,那麼首先要知道的內容是如何通過位運算來進行許可權操作的。許可權操作,我個人認為有 授權、取消授權和驗證這三個操作。利用二進位制的或運算來實現授權操作;利用二進位制的先求補、在求與來實現取消授權的操作;利用與運算實現許可權的驗證操作。
先說明一下二進位制的與(&)、或(|)、求補(~)運算:
或(|)運算的內容有: 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 |
如果用乙個整數來代表乙個操作許可權的話,那麼
那麼數字3(00000011)則表示有建立和編輯的許可權,13(00001101)折表示有詳細、建立、編輯這三種操作許可權。
如果乙個功能已經有了 建立和編輯的許可權,二進位制就是 0000 0011 ,這麼現在要新增乙個檢視(0010 0000)許可權,授權之後的許可權的二進位制就為(0010 0011),通過2.1的內容可知,當
0000 0011
| 0010 0000
0010 0011,
這樣就通過了或運算新增給原有的許可權新增乙個新的許可權
如果乙個功能已經有了檢視、建立、編輯的許可權,二進位制就是 0010 0011 ,現在要求要取消編輯的許可權,取消授權之後的二進位制就是: 0010 0001 ,整個內容看起來就是對編輯位進行求反運算,那麼我們先看編輯許可權的求補運算的結果:
~ 0000 0010
1111 1101 ,
那麼求補的結果在和原有許可權進行和運算
(0010 0011)
& (1111 1101)
(0010 0001) ,
這樣就得到了取消之後的二進位制 0010 0001(17)
現在要判斷 0011 1100 這個代表的許可權操作中,有沒有審核許可權(0001 0000),那麼我們對這兩個許可權進行 與運算
(0011 1100)
& (0001 0000)
(0001 0000),
判斷有沒有建立許可權(0000 0001),
(0011 1100)
& (0000 0001)
0000 0000,
也就是說,兩個許可權進行與運算,如果與運算的結果為0,則表示無該操作,反正,則表示具有該操作。
/// /// 定義許可權.///
[flags]
public enum permissionvalue
/// /// 許可權驗證.///
/// /// 需要驗證的許可權.
///
/// /// 已經存在的許可權.
///
/// /// the .
///
public bool verifypermission(permissionvalue toverification,
permissionvalue functioninrole)
/// /// 許可權驗證.
///
/// /// 功能id.
///
/// /// 角色id.
///
/// /// the 需要驗證的許可權.
///
/// /// the .
///
public bool verifypermission(guid functionid,
guid roleid,permissionvalue toverification)
var functioninrole = this.functioninrolerepository.find(spec);
return this.verifypermission(toverification,functioninrole.permissionvalue);}
/// /// 增加許可權.
///
/// /// 功能id.
///
/// /// 角色id.
///
/// /// 需要新增的許可權.
///
public void addauthority(guid functionid, guid roleid, permissionvalue toaddpermission));}
else
// todo:unitofwork模式
this.functioninrolerepository.context.commit();}
/// /// 刪除許可權.
///
/// /// 功能id.
///
/// /// 角色id.
///
/// /// 需要移除的許可權.
///
/// /// 未授權
///
public void deleteauthority(guid functionid,guid roleid, permissionvalue toremovepermission)
var functioninrole = this.functioninrolerepository.find(spec);
// 求補和與運算實現許可權移除:value= value&(~toremove)
functioninrole.permissionvalue &= ~toremovepermission;
this.functioninrolerepository.update(functioninrole);
// todo:應當使用unitofwork模式
// 領域服務是否依賴倉儲?
this.functioninrolerepository.context.commit();}
/// /// 檢驗角色、功能是否存在和功能點是否能夠對某種許可權進行操作.
///
/// /// 功能id.
///
/// /// 角色id.
///
/// /// 待驗證許可權.
///
/// ///
private void guardauthorityagum(guid functionid,
guid roleid, permissionvalue permissionvalue)
var function = this.functionrepository.getbykey(functionid);
if (!this.verifypermission(permissionvalue, function.permissionvalue))
}
本章主要是闡述了如何使用二進位制的位運算進行許可權操作的,包括授權、取消授權、驗證這三種操作。通過二進位制的或運算可以達到授權的操作,通過求補和與運算,可以實現取消授權的操作,通過與運算,可以實現許可權驗證的操作。
下一章內容,主要是介紹專案結構,包括如何分層、類庫之間的引用關係等內容。
278252889(angularjs中文社群)
5008599(mvc ef***)
134710707(abp架構設計*** )
59557329(c#基地 )
230516560(.net ddd基地 )
基於二進位制許可權管理
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...
二進位制許可權
package test 二進位制許可權使用 許可權 0 表示所有許可權 1 新增 0001 2 修改 0010 4 刪除 0100 8 檢視 1000 如 10 十進位制的 10 不是二進位制的 1 代表的許可權是 修改和檢視許可權 public class bitpermission 是否含有許...