1.粗粒度權限設計與細粒度權限設計
粗粒度(Coarse-graind)
表示類別級,即僅考慮對象的類別(the type of object),不考慮對象的某個特定實例。比如,用戶管理中,創建、刪除,對所有的用戶都一視同仁,並不區分操作的具體對象實例。
粗粒度權限管理比較容易將權限管理的代碼抽取出來在系統架構級別統一處理(shiro)。對於web系統,通過filter過慮器實現url攔截,也可以使用springmvc的攔截器實現基於url的攔截。
細粒度(fine-graind)
表示實例級,即需要考慮具體對象的實例(the instance of object),當然,細粒度是在考慮粗粒度的對象類別之后才再考慮特定實例。比如,合同管理中,列表、刪除,需要區分該合同實例是否為當前用戶所創建,可以理解為數據級別的控制
對細粒度權限管理在數據級別是沒有共性可言,針對細粒度權限管理就是系統業務邏輯的一部分,如果在業務層去處理相對比較簡單,如果將細粒度權限管理統一在系統架構級別去抽取,比較困難,即使抽取的功能可能也存在擴展不強。
建議細粒度權限管理在業務層去控制(自定義注解)。比如:部門經理只查詢本部門員工信息,在service接口提供一個部門id的參數,controller中根據當前用戶的信息得到該 用戶屬於哪個部門,調用service時將部門id傳入service,實現該用戶只查詢本部門的員工
2.頁面上的資源分類
1、所有的請求資源
url的控制
http://localhost:8080/project/UserAction_showAllUser.action
2、方法,例如請求UserAction中的showAllUser方法
3、頁面中的內容
1、菜單 - 不同的用戶登錄系統以后應該顯示不同的菜單
2、功能/按鈕
4、數據(細粒度)
1、不同部門只能查看本部門數據,同一部門的不同職位查看信息范圍不同,如經理看全部,員工只看自己。