一般來說,只要有用戶參與的系統,那麼都要有權限管理,尤其是一些後台的管理系統,
權限管理可以實現對用戶訪問系統的控制,按照安全規則或者相關策略的控制,可以使用戶訪問到只屬於自己被授權的相關(比如菜單,或者頁面資源)
權限管理包括用戶認證和授權兩模塊
用戶認證,說白了就是登錄的時候進行的驗證,驗證用戶身份合法性。
最常見的用戶身份驗證的方式:
1、用戶名 + 密碼
2、手機號 + 驗證碼
3、證書驗證
來看一下流程圖:
用戶授權,淺白點講就是權限訪問控制,在用戶認證通過後,系統對用戶訪問資源進行控制,用戶具有資源的訪問權限方可訪問對於的資源
上篇文章中講到了5張表,其實是由6張表而來,但是由於第六章表資源是可以整合的,所以可以避免冗余而采用了5張表,最簡單的權限控制是至少由5張表來構成的
主體(賬號、密碼)
權限(權限名稱、資源名稱、資源訪問地址)
角色(角色名稱)
角色和權限關系(角色id、權限id)
主體和角色關系(主體id、角色id)
用戶需要被分配到相應的權限才可訪問相應的資源,這些權限信息需要保存
把用戶信息、權限管理、用戶分配的權限信息寫到數據庫(權限數據模型)
就是判斷用戶是否是項目經理還是普通員工,訪問的資源就不同
比如
if (user.role = [pm]) {
// 訪問
}
if (user.role != [pm]) {
// 訪問
}
這麼做沒問題,但是不容易維護,一旦權限變更,那麼就要變更代碼
if (user have [pm]) {
// 訪問
} else if (user have [boss]) {
// 訪問
}
這麼做只要針對user配置權限,把對應的資源給他,那麼就能訪問,不需要每次修改代碼,增加了可維護性
基於url攔截的方式實現
舉個栗子:使用springMVC攔截器實現
攔截對應url,url配置一個私有攔截list,攔截到的list必須進行驗證,
進入攔截器驗證後查看是否存在token信息,如果不存在,攔截返回到web登錄頁面,或者json錯誤信息給手機端
同時驗證的時候針對資源,需要判斷是否能夠訪問,可以第一次查詢數據庫的資源信息緩存到session或者redis中
1、spring security (目前連spring自己都拋棄了這個框架,因為太重了,現在擁抱了Apache Shiro)
2、Shiro (to be continued...)