權限設計(下) - 細說權限設計


什么是權限管理

一般來說,只要有用戶參與的系統,那么都要有權限管理,尤其是一些后台的管理系統,

權限管理可以實現對用戶訪問系統的控制,按照安全規則或者相關策略的控制,可以使用戶訪問到只屬於自己被授權的相關(比如菜單,或者頁面資源)

權限管理包括用戶認證和授權兩模塊

用戶認證

用戶認證,說白了就是登錄的時候進行的驗證,驗證用戶身份合法性。

最常見的用戶身份驗證的方式:

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...)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM