RBAC 权限入门
RBAC 權限入門
RBAC概念
RBAC:Role Based Access Control,核心是用戶只和角色關聯,而某角色可以擁有各種各樣的權限并可繼承。
RBAC白話介紹
RBAC有很多模型,最簡單的就是Core RBAC。說白了就是User用戶, Role角色, Permission許可 三個對象。
l???????? 角色有多個操作許可
l???????? 當用戶分配了一個角色,就有了這個操作。
那么在程序里面怎么實現呢?很簡單。
首先我們有一系列操作,例如Open File, Close File, Save File等。在代碼里面可以一些方法。
然后我們有多個角色,例如Manager, Worker。
他們之間的對應關系如下,一般寫在配置文件或者保存在數據庫。
當進行權限驗證的時候,就是看這個用戶的角色是否包含這個動作的permission.
class?RBCA
????{
????????Dictionary<string,?string>?userToRole?=?new?Dictionary<string,?string>();
????????Dictionary<string,?List<string>>?roleToPermission?=?new?Dictionary<string,?List<string>>();
????????public?RBCA()
????????{
????????????//初始化manager的權限
????????????string?manager?=?"Manager";
????????????List<string>?managerlist?=?new?List<string>();
????????????managerlist.Add("OpenFile");
????????????managerlist.Add("CloseFile");
????????????managerlist.Add("SaveFile");
????????????//初始化worker的權限
????????????string?worker?=?"Worker";
????????????List<string>?workerlist?=?new?List<string>();
????????????workerlist.Add("OpenFile");
????????????roleToPermission.Add(manager,?managerlist);
????????????roleToPermission.Add(worker,?workerlist);
????????????//初始化用戶pixysoft的角色
????????????string?user?=?"pixysoft";
????????????userToRole.Add(user,?manager);
????????}
????????public?void?OpenFile(string?user)
????????{
????????????string?role?=?userToRole[user];
????????????//檢測權限
????????????if?(!roleToPermission[role].Contains("OpenFile"))
????????????????return;
????????????Console.Write("Open?file?succeed!");
????????}
????????public?void?CloseFile(string?user)
????????{
????????????string?role?=?userToRole[user];
????????????//檢測權限
????????????if?(!roleToPermission[role].Contains("CloseFile"))
????????????????return;
????????????Console.Write("CloseFile?succeed!");
????????}
????????public?void?SaveFile(string?user)
????????{
????????????string?role?=?userToRole[user];
????????????//檢測權限
????????????if?(!roleToPermission[role].Contains("SaveFile"))
????????????????return;
????????????Console.Write("SaveFile?succeed!");
????????}
????}
一個超級簡單的RBAC就體現出來的,但是沒有任何實用價值。下面我會使用AOP思想去實現這個權限系統。
RBAC優缺點分析
優點在于:
l???????? 易用和高效的授權方式 :用戶在進行授權時只需對角色進行授權,之后將相應的角色分配給用戶即可。
l???????? 簡便和高效的授權模型維護 :在技術角度來講,進行授權模型的維護上因為基本只需要維護關聯模型而顯得簡單而高效。
缺點在于:
l???????? 復雜的權限校驗 :在進行權限校驗時需要不斷的遍歷和遞規,造成了性能的影響。
l???????? 對于數據權限的不夠支持 :沒有明確的數據權限模型,可以看到在經過重構的數據權限模型其實已經和 RBAC 模型有一定的出入,而且在數據權限的校驗上實現起來是非常的低效。
參考資料
http://www.blogjava.net/BlueDavy/archive/2005/05/18/4745.html
http://www.blogjava.net/renyangok/archive/2006/12/06/85838.html
總結
                            
                        - 上一篇: 一个简单的java程序
 - 下一篇: 在VS2019 C++ 中实现Socke