漫談權限系統(tǒng)之基于ACL的實現(xiàn)
基于ACL的實現(xiàn)
ACL介紹
ACL全稱Access Control List,在ACL中,包含用戶(User)、資源(Resource)、資源操作(Operation)三個關鍵要素。通過將資源以及資源操作授權給用戶而使用戶獲取對資源進行操作的權限,模型如下圖所示:
圖表 1 ACL模型
實現(xiàn)方案
通過上面對ACL模型的介紹,可以看出ACL是個簡單的模型,但其并未提出對于權限的繼承、權限的排斥和包含的解決方案。
ACL模型得到接受必然也是有它的理由的,現(xiàn)在來看看基于ACL模型如何來實現(xiàn)授權模型和權限校驗部分。
l 授權模型
授權模型遵循ACL模型進行搭建,建立ACL介紹中的模型。
針對授權模型中的幾個關鍵部分進行描述:
n 授權
根據(jù)ACL模型,授權動作主要經過以下幾個步驟完成:
u 配置系統(tǒng)資源和資源的操作
按照模型維護Resource、Operation實體以及Resource與Operation的關聯(lián)模型即可實現(xiàn)。
u 授予用戶能操作的資源和資源的操作
按照模型維護用戶與Resource以及Operation的關聯(lián)即可實現(xiàn)。
n 權限的繼承
在ACL模型中未定義權限的繼承,這也是由于在ACL的模型中根本就沒有權限繼承的點,因為用戶本身是不可能繼承的。
在很多改良的ACL模型系統(tǒng)中,會通過給組或組織機構授權來完成,這時就出現(xiàn)了權限繼承的點了,如組或組織機構的權限繼承,那么在ACL模型中如何去實現(xiàn)這個權限繼承呢?
為實現(xiàn)給組或組織機構進行授權,此時通常需要對上述ACL模型進行改造方可實現(xiàn),模型重構如下:
圖表 2 重構后的ACL模型
在對組或組織機構進行授權動作時,經過以下步驟來實現(xiàn)權限的繼承:
u 維護當前組或組織機構中所有用戶的ACL模型
維護當前組或組織機構和Resource、Operation的關聯(lián)模型。
遞規(guī)獲取當前組或組織機構的父節(jié)點的ACL模型,并合并形成新的Resource、Operation關聯(lián)列表,此時獲取該組或組織機構中的用戶產生用戶和Resource、Operation的關聯(lián)ACL模型。
u 維護當前組或組織機構中所有下級節(jié)點中的所有用戶的ACL模型
遞規(guī)獲取當前組或組織機構的子節(jié)點,同時合并形成子節(jié)點新的Resource、Operation關聯(lián)列表,之后獲取子節(jié)點中的用戶產生新的Resource、Operation關聯(lián)列表。
在經過以上的步驟后權限的繼承得以實現(xiàn),在使用過程中同時發(fā)現(xiàn)另外一個問題,在更新組或組織機構下的用戶時需要同時維護當前組或組織機構的ACL模型,否則會造成不同步的問題。
n 權限的排斥和包含
權限的排斥和包含在ACL模型中同樣沒有定義,通常的實現(xiàn)方法是定義Operation的自關聯(lián),維護時需增加對Operation自關聯(lián)的維護以及在維護User、Resource、Operation關聯(lián)時根據(jù)Operation的自關聯(lián)產生其包含權限的ACL列表。
l 資源權限校驗
在以上授權模型的基礎上,對于操作主體能否對資源進行操作權限的判斷通過ACL列表直接判斷用戶是否具有對資源進行操作的權限即可。
通常在中小型系統(tǒng)的做法是在用戶登錄時獲取構成用戶的ACL列表,以提升資源權限校驗的效率。
l 數(shù)據(jù)權限校驗
在ACL模型中未明確定義數(shù)據(jù)權限校驗的實現(xiàn),根據(jù)數(shù)據(jù)權限校驗的需求將數(shù)據(jù)映射為Resource,對數(shù)據(jù)的操作映射為Operation,這個時候數(shù)據(jù)權限的授權模型重構為:
圖表 3 數(shù)據(jù)權限的ACL模型
基于此模型對數(shù)據(jù)權限的授權和權限校驗進行描述:
n 授權
在對數(shù)據(jù)進行授權時根據(jù)模型此時的授權對象主要有User、Group兩種,授權時需要通過以下步驟來完成:
u 維護數(shù)據(jù)本身構成的ACL模型
維護當前數(shù)據(jù)、操作與Group、User的關聯(lián)模型。
遞規(guī)獲取當前數(shù)據(jù)、操作的父節(jié)點的Group、User的關聯(lián)模型,合并組成新的Group、User列表,根據(jù)此列表形成對當前數(shù)據(jù)進行操作的用戶列表,此時更新形成UseràResourceàOperation的ACL列表模型。
u 維護數(shù)據(jù)所有子節(jié)點的ACL模型
遞規(guī)獲取數(shù)據(jù)的所有子節(jié)點,同時對合并形成每個子節(jié)點的新的Group、User列表,更新子節(jié)點的UseràResourceàOperation的ACL列表模型。
在經過以上的步驟后數(shù)據(jù)權限的繼承以及需求得以實現(xiàn),在使用過程中同時發(fā)現(xiàn)另外一個問題,在更新組或組織機構下的用戶時需要同時維護當前組或組織機構的ACL模型,否則會造成不同步的問題。
n 權限校驗
u 獲取操作者權限范圍內的全部數(shù)據(jù)
直接通過UseràResourceàOperation的ACL列表獲取所有數(shù)據(jù)。
u 分頁獲取操作者權限范圍內的數(shù)據(jù)
直接通過UseràResourceàOperation的ACL列表分頁(結合數(shù)據(jù)庫的分頁技術)獲取數(shù)據(jù)。
優(yōu)缺點分析
經過上述實現(xiàn)方案的描述,可以看出基于ACL的實現(xiàn)的優(yōu)點主要在于:
n 易用和高效的權限校驗
在進行資源和數(shù)據(jù)的權限校驗時只需通過通過ACL列表即可實現(xiàn)。
缺點在于:
n 權限的繼承
對權限繼承不夠支持。
n 復雜和低效的授權方式
在進行資源和數(shù)據(jù)的授權時非常復雜,特別是在加入權限的繼承、排斥和包含后,需要在維護本身ACL列表的同時維護所有子節(jié)點的ACL列表,導致效率低下。
posted on 2005-10-13 18:13 BlueDavy 閱讀(5856) 評論(1) 編輯 收藏 所屬分類: Java 、系統(tǒng)設計