許可權專案總結(一)常用許可權設計
許可權管理中關於如何來設計的問題?可以轉換為使用者、角色、資源的設計,至多還可以配置一個使用者組的概念。
許可權的設計是為了滿足系統在不同的使用者在使用過程中,系統呈現給使用使用者的資源(介面、功能等統稱為資源)對於許可權不同的使用者是不一樣的。
許可權:可分為資料許可權、資源許可權。
1. 資料許可權
使用者A只能檢視屬於使用者A的資料。例如:使用者A登入某電商網站後,只能檢視屬於自己的訂單記錄,無權檢視其它使用者的訂單。
2. 資源許可權
使用者A只能檢視屬於使用者A對應許可權的的檔案、介面、按鈕、表單。例如:普通使用者是登入系統之後,無法檢視系統管理介面的介面。
使用者
物件:系統中可以被使用者的訪問的資源。例如:系統中按鈕、表單、檔案、功能等。
使用者組:擁有共同角色的一類使用者,例如學生。這個的存在省去了許可權系統為每位使用者逐一授權的繁瑣過程,當然也增加了程式設計和開發的難度。
角色:擁有某些特定許可權的。例如:管理員、超級管理員等。
無論是哪種的許可權設計,大多是根據這幾個實體以及實體之間的關係來分配許可權、授權使用者、分配角色。
RBAC96模型
RBAC(Role_Base_Authority_Control),主要是圍繞role來展開的,相比於傳統設計,減少了使用者和許可權之間的耦合;並且對於許可權擴充套件相對比較靈活;另外支援多管理員的分散式管理。最基本的RBAC設計是最為簡單許可權設計,下圖為該設計的圖解。
圖中,最基本的三元素:使用者、角色、許可權。較為通用,能夠適應最為基本的許可權需求。
1.使用者和角色是多對多的關係。一個使用者可以對應多個角色,一個角色同樣可以賦給多個使用者。
el:專案開發過程中,員工A可以是專案組長,也可以為開發者。同樣對於開發者這樣一個角色的員工,也會存在多個。
2.角色和許可權同為多對多關係。一個角色可以被賦值多個許可權,同種許可權也可以賦給多種角色。
el:論壇系統中管理員可以管理論壇的模組的許可權,可以管理論壇內評論的許可權。同樣管理論壇這樣一個許可權,也存在於管理員和超級管理員這樣的角色。
以上為最為基本的RBAC96模型許可權設計,RBAC1和RBAC2、RBAC3都是基於RBAC0的基礎上去增加了一系列的規則來更加豐富和完善許可權設計。
RBAC1:在RBAC0的基礎上,增加了角色繼承的補充。也就是角色之間存在上下級的關係,對應到實體設計中也就是角色實體的自身關聯。體現在設計中,角色應該呈現樹形結構。
RBAC2:RBAC2的約束規定了許可權被賦予角色時,或角色被賦予使用者時,以及當用戶在某一時刻啟用一個角色時所應遵循的強制性規則。
強制性規則分為 職責分離約束(SOD)、預請求約束、基數約束。
RBAC3:則是在結合RBAC1和RBAC2的基礎上,綜合的角色訪問控制模型。
如圖:基本的RBAC模型,而RBAC96模型中,會話則是針對使用者以及角色來授權或者稱為啟用許可權。可以發現,使用者以及使用者組、許可權這幾個實體都是圍繞著角色來展開的。而其中這些模型的分類都是在RBAC0的基礎上做出的完善。
如圖user和usergroup為多對多的關係,user和role為多對多關係,usergroup和role為多對多的關係,role和application也應為多對多的關係,圖中沒有顯示。
在實際設計的過程中,在RBAC的基礎上還會根據具體的需求來穿插著關於許可權的一些設計原則,如:最小許可權設計原則,職責分離原則。
資料參考:
http://www.cnblogs.com/couhujia/archive/2010/09/13/1824605.html
http://www.cnblogs.com/leoxie2011/archive/2011/05/19/2050626.html
最小許可權原則:http://www.doc88.com/p-770492289780.html
靜態職責分離:http://www.doc88.com/p-2344397074391.html
ACL許可權控制:http://blog.csdn.net/javaman_chen/article/details/8136587