1. 程式人生 > >許可權專案總結(一)常用許可權設計

許可權專案總結(一)常用許可權設計

許可權管理中關於如何來設計的問題?可以轉換為使用者、角色、資源的設計,至多還可以配置一個使用者組的概念。

許可權的設計是為了滿足系統在不同的使用者在使用過程中,系統呈現給使用使用者的資源(介面、功能等統稱為資源)對於許可權不同的使用者是不一樣的。

許可權:可分為資料許可權、資源許可權。

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