【轉】權限設計思路

我這兩天在做會員系統的設計,我將權限部分從會員系統中獨立出來,成爲一個獨立的系統。會員系統完成用戶管理和身份認證,權限系統完成權授權管理和權限驗證。

在我的權限系統中主要有這幾個類或者接口:SecureFactory,SecureManager,SecureObject,SecureModule和Privilege。

SecureFactory:工廠類,負責構造SecureManager的實例。之所以這樣做是想讓SecureManager支持本地和遠程兩種調用方式,不同的調用方式用不同的SecureManager實現支持,比如EJBSecureManager。

SecureManager:權限系統對外的統一接口,提供grant,revoke,和權限查詢的方法,採用接口設計。

SecureObject:授權的對象或者可進行權限判斷的對象,採用接口設計。User,Group,Role或者組織機構,文件,URL資源等都是SecureObject。SecureManager在進行權限縣官操作的時候只接受SecureObject對象。

SecureModule:權限判斷邏輯的抽象,採用接口設計,提供gant和權限查詢的方法.如上所述,權限系統中可以進行權限驗證或者可授權的對象有很多種,不同的授權對象進行權限判斷的時候都有自己的邏輯,因此要讓權限系統儘可能滿足這些要求,有足夠的擴展性,我將這部分邏輯抽象出來。

Privilege:權限

這些類是怎樣協作的呢?以一個基於角色認證的權限判斷爲例子,我是這樣做的:
1。開發一個RoleSecureObject,讓這個RoleScureObject可以接受角色對象

2。開發一個RoleSecureModule,完成具體的權限判斷和權限查詢的方法

3。在xml配置文件中進行配置。
申明RoleSecureObject,並設置這個SecureObject的module爲RoleSecureModule

4。具體的判斷代碼:

SecureManager sm = SecureManager.getInstance();
sm.grant(new RoleSecureObject("Administrator"),"usermanager/add");

sm.hasPrivilege(new RoleSecureObject("Administrator"),"usermanager/add");
//或者
sm.hasPrivilege(new UserSecureObject("dev"),"usermanager/add");


如果是要對其他資源進行授權和權限判斷只需要開發新的SecureObject和SecureModule並添加在xml配置文件中就行了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章