天天看點

粗粒度與細粒度權限控制

1.1   什麼是粗粒度和細粒度權限

粗粒度權限管理,對資源類型的權限管理。資源類型比如:菜單、url連接配接、使用者添加頁面、使用者資訊、類方法、頁面中按鈕。。

粗粒度權限管理比如:超級管理者可以通路戶添加頁面、使用者資訊等全部頁面。

部門管理者可以通路使用者資訊頁面包括 頁面中所有按鈕。

細粒度權限管理,對資源執行個體的權限管理。資源執行個體就資源類型的具體化,比如:使用者id為001的修改連接配接,1110班的使用者資訊、行政部的員工。

細粒度權限管理就是資料級别的權限管理。

細粒度權限管理比如:部門經理隻可以通路本部門的員工資訊,使用者隻可以看到自己的菜單,大區經理隻能檢視本轄區的銷售訂單。。

粗粒度和細粒度例子:

 系統有一個使用者清單查詢頁面,對使用者清單查詢分權限,如果粗顆粒管理,張三和李四都有使用者清單查詢的權限,張三和李四都可以通路使用者清單查詢。

進一步進行細顆粒管理,張三(行政部)和李四(開發部)隻可以查詢自己本部門的使用者資訊。張三隻能檢視行政部 的使用者資訊,李四隻能檢視開發部門的使用者資訊。細粒度權限管理就是資料級别的權限管理。

1.2   如何實作粗粒度和細粒度權限管理

如何實作粗粒度權限管理?

粗粒度權限管理比較容易将權限管理的代碼抽取出來在系統架構級别統一處理。比如:通過springmvc的攔截器實作授權。

如何實作細粒度權限管理?

對細粒度權限管理在資料級别是沒有共性可言,針對細粒度權限管理就是系統業務邏輯的一部分,如果在業務層去處理相對比較簡單,如果将細粒度權限管理統一在系統架構級别去抽取,比較困難,即使抽取的功能可能也存在擴充不強。

建議細粒度權限管理在業務層去控制。

比如:部門經理隻查詢本部門員工資訊,在service接口提供一個部門id的參數,controller中根據目前使用者的資訊得到該 使用者屬于哪個部門,調用service時将部門id傳入service,實作該使用者隻查詢本部門的員工。

1.3   基于url攔截的方式實作

基于url攔截的方式實作在實際開發中比較常用的一種方式。

對于web系統,通過filter過慮器實作url攔截,也可以使用springmvc的攔截器實作基于url的攔截。

1.4   使用權限管理架構實作

對于粗粒度權限管理,建議使用優秀權限管理架構來實作,節省開發成功,提高開發效率。

shiro就是一個優秀權限管理架構。