漫談許可權系統之基於ACL的實現

2021-08-29 14:19:26 字數 2444 閱讀 4948

基於acl的實現

acl介紹

acl全稱access control list,在acl中,包含使用者(user)、資源(resource)、資源操作(operation)三個關鍵要素。通過將資源以及資源操作授權給使用者而使使用者獲取對資源進行操作的許可權,模型如下圖所示:

圖表1acl模型

實現方案

通過上面對acl模型的介紹,可以看出acl是個簡單的模型,但其並未提出對於許可權的繼承、許可權的排斥和包含的解決方案。

acl模型得到接受必然也是有它的理由的,現在來看看基於acl模型如何來實現授權模型和許可權校驗部分。

l授權模型

授權模型遵循acl模型進行搭建,建立acl介紹中的模型。

針對授權模型中的幾個關鍵部分進行描述:n授權

根據acl模型,授權動作主要經過以下幾個步驟完成:

u配置系統資源和資源的操作

按照模型維護resource、operation實體以及resource與operation的關聯模型即可實現。

u授予使用者能操作的資源和資源的操作

按照模型維護使用者與resource以及operation的關聯即可實現。

n許可權的繼承

在acl模型中未定義許可權的繼承,這也是由於在acl的模型中根本就沒有許可權繼承的點,因為使用者本身是不可能繼承的。

在很多改良的acl模型系統中,會通過給組或組織機構授權來完成,這時就出現了許可權繼承的點了,如組或組織機構的許可權繼承,那麼在acl模型中如何去實現這個許可權繼承呢?

為實現給組或組織機構進行授權,此時通常需要對上述acl模型進行改造方可實現,模型重構如下:

圖表2重構後的acl模型

在對組或組織機構進行授權動作時,經過以下步驟來實現許可權的繼承:

u維護當前組或組織機構中所有使用者的acl模型

維護當前組或組織機構和resource、operation的關聯模型。

遞規獲取當前組或組織機構的父節點的acl模型,並合併形成新的resource、operation關聯列表,此時獲取該組或組織機構中的使用者產生使用者和resource、operation的關聯acl模型。

u維護當前組或組織機構中所有下級節點中的所有使用者的acl模型

遞規獲取當前組或組織機構的子節點,同時合併形成子節點新的resource、operation關聯列表,之後獲取子節點中的使用者產生新的resource、operation關聯列表。

在經過以上的步驟後許可權的繼承得以實現,在使用過程中同時發現另外乙個問題,在更新組或組織機構下的使用者時需要同時維護當前組或組織機構的acl模型,否則會造成不同步的問題。

n許可權的排斥和包含

許可權的排斥和包含在acl模型中同樣沒有定義,通常的實現方法是定義operation的自關聯,維護時需增加對operation自關聯的維護以及在維護user、resource、operation關聯時根據operation的自關聯產生其包含許可權的acl列表。

l資源許可權校驗

在以上授權模型的基礎上,對於操作主體能否對資源進行操作許可權的判斷通過acl列表直接判斷使用者是否具有對資源進行操作的許可權即可。

通常在中小型系統的做法是在使用者登入時獲取構成使用者的acl列表,以提公升資源許可權校驗的效率。

l資料許可權校驗

在acl模型中未明確定義資料許可權校驗的實現,根據資料許可權校驗的需求將資料對映為resource,對資料的操作對映為operation,這個時候資料許可權的授權模型重構為:

圖表3資料許可權的acl模型

基於此模型對資料許可權的授權和許可權校驗進行描述:n授權

在對資料進行授權時根據模型此時的授權物件主要有user、group兩種,授權時需要通過以下步驟來完成:

u維護資料本身構成的acl模型

維護當前資料、操作與group、user的關聯模型。

遞規獲取當前資料、操作的父節點的group、user的關聯模型,合併組成新的group、user列表,根據此列表形成對當前資料進行操作的使用者列表,此時更新形成useràresourceàoperation的acl列表模型。

u維護資料所有子節點的acl模型

遞規獲取資料的所有子節點,同時對合併形成每個子節點的新的group、user列表,更新子節點的useràresourceàoperation的acl列表模型。

在經過以上的步驟後資料許可權的繼承以及需求得以實現,在使用過程中同時發現另外乙個問題,在更新組或組織機構下的使用者時需要同時維護當前組或組織機構的acl模型,否則會造成不同步的問題。

n許可權校驗

u獲取操作者許可權範圍內的全部資料

Seam中基於ACL的許可權控制(1)

seam框架已經能夠解決大多數web程式開發中會遇到的問題。通過提供一系列基於 最佳實踐 總結出的統一模型,開發人員的web程式的開發工作變得非常輕鬆。程式設計師在開發具體的相關業務邏輯的時候,就不會再鬱悶了,因為大多數功能在seam中都有對應的模組來實現。例如,seam生成pdf 傳送email ...

許可權系統之RBAC設計 基於角色的許可權認證 思想

rbac模型 role based access control 基於角色的訪問控制 模型是20世紀90年代研究出來的一種新模型,但其實在20世紀70年代的多使用者計算時期,這種思想就已經被提出來,直到20世紀90年代中後期,rbac才在研究團體中得到一些重視,並先後提出了許多態別的rbac模型。其...

基於Struts的許可權實現

2 許可權的判斷 這一部分有很多中實現方式,一種所有的action繼承baseaction 在baseaction裡面實現,並在沒乙個action裡面去呼叫判斷.另外一種交給struts去判斷 org.apache.struts.action.requestprocessor 裡面有乙個proces...