權限模型
幾乎在所有的系統中對于權限控制都有直接的需求,而這類需求往往有其相似性,綜合常見的對于權限系統的需求構成了本文檔,文檔主要從功能復用以及模型復用的角度來對權限系統進行總結,以便在各種系統中可對照此篇文檔來進行權限系統的實現,考慮到文檔的關注點在復用度,在文檔中不會過多的去描述功能點到模型產生的過程,而是采用直接通過產生的模型來說明基于此模型如何實現功能點的需求。
二. 功能復用
功能復用相當于此權限模型適合的上下文場景,此權限模型在功能點方面的考慮主要有以下三個方面:
n 基于角色的用戶安全管理
系統權限以角色為基礎,即以角色來進行權限的分配以及授予,角色分配給用戶以使用戶可獲取相應的權限,角色通過授予權限來獲得該角色所對應擁有的權限。
角色的權限可繼承,即子角色自動繼承父角色的權限。
權限的包含與排斥,包含舉例來說就是權限A可包含權限B,體現出來即為擁有權限A即自動擁有了權限B,而排斥舉例來說就是角色不可同時擁有權限A和權限B。
n 系統資源(功能模塊)操作的控制
系統資源操作的控制在系統上主要分為兩個方面:
l 正常途徑系統資源操作的控制
體現在實際的需求上通常是菜單、按鈕、鏈接根據用戶所在角色的權限的可見性。
l 非法途徑系統資源操作的控制
體現在實際的需求上是防止通過非法的URL或命令等方式對系統受保護的系統資源進行操作。
n 數據資源操作的控制
數據資源操作的控制在系統中實際的體現通常是用戶只能訪問相應數據資源操作權限范圍內的數據,如在一個站點中有欄目A、B、C,用戶M只擁有對A的訪問權限以及對B的管理權限,那么在用戶M訪問系統時站點中應該只列出欄目A和欄目B,同時在欄目B上擁有相應的管理按鈕或鏈接。
數據資源也需要支持權限繼承的模式,即當數據資源本身構成了需要繼承的父子關系時,子自動擁有父的所有權限,舉例來說就是站點和欄目,欄目自動擁有站點的所有權限。
數據資源的權限也是需要有包含和排斥的支持。
數據資源操作權限的授予通常需要的授予給多種對象,如用戶、角色以及組織機構等。
三. 模型復用
對于以上的功能點,提出了相應的解決方案構成如下模型:
n 基于角色的用戶安全管理
基于RBAC構成實現功能點的模型,如下:
圖表 1 基于RBAC的系統資源權限模型
基于此模型對當前需求的實現方法為:
l 權限的授予
在權限授予時需要實現的為維護用戶與角色的關聯模型以及角色與權限的關聯模型。
同時需要的是資源以及操作的維護,資源上配置的主要為功能模塊的一些相關信息,如名稱、描述等,操作上配置的主要為功能模塊所需要受控的操作,如對功能模塊的訪問、保存動作等,此處的關鍵在于配置操作所對應的命令,在B/S體系中通常是URL,在C/S體系中有可能是Command或其他的入口關鍵字。
l 角色權限的繼承
角色權限的繼承通過角色的子關聯來實現,遵循的原則為子角色自動擁有父角色的所有權限,在進行授權動作時所需要做的是維護角色父子關系關聯模型。
l 權限的包含與排斥
權限的包含通過權限的子關聯來實現,遵循的原則為父自動擁有子的概念,在進行授權動作時所需做的是維護權限的父子關系關聯模型。
權限的排斥在此模型中沒有考慮。
n 系統資源(功能模塊)操作的控制
系統資源操作的控制基于圖表1的模型而得以實現。
l 正常途徑系統資源操作的控制
此時通常的做法是在菜單、按鈕、鏈接這些顯示之前做對應的資源操作權限的判斷。
判斷的方法為獲取用戶所在的角色,判斷用戶角色是否有進行資源操作的權限(同時需判斷權限的包含的問題),如無則遞規獲取用戶角色的父角色是否有進行資源操作的權限。
l 非法途徑系統資源操作的控制
對于非法途徑對系統資源操作的訪問,通常的實現方法為在具體的對象執行前做截斷處理,通常采用Proxy或Interceptor模式。
n 數據資源操作的控制
數據資源操作的控制則難以基于上面的權限模型進行實現,需要對其進行擴展,產生的實現需求的模型為:
圖表 2 數據資源權限模型
基于此模型對于數據資源操作的控制的實現主要在兩個方面:
l 數據資源操作權限的授予
在進行數據資源操作權限的授予時維護權限授予模型,同時需要根據數據資源操作權限的授予同步校驗權限模型(此時需要考慮權限的繼承、包含的問題)。
l 數據資源操作權限的校驗
校驗時通過校驗權限模型即可完成。
四. 問題
在文中提及的權限模型確實可以實現功能需求,但其在開發過程中以及應用過程中通常有這樣的問題:
n 系統資源操作控制時權限校驗的低效
通常的解決方案是cache機制。
n 數據資源操作權限授予的低效
n 權限系統對于原有系統的侵入性
通常的解決方案有Proxy、Interceptor、AOP。
ps: 這篇相對于我之前的漫談權限系統系列的文章來說相當于只是個抽取和歸納,詳細的還是得看那個系列的幾篇文章。
posted on 2005-11-08 11:49 BlueDavy 閱讀(6905) 評論(8) 編輯 收藏 所屬分類: 系統設計