登陸&&權限流程圖javascript
首先咱們肯定的權限控制分爲三大部分,其中根據粒度大小分的更細:前端
登陸訪問權限控制是對用戶的校驗。在用戶登陸成功以後,後臺將返回一個token,以後前端每次進行接口請求的時候,都要帶上這個token。後臺拿到這個token後進行判斷,若是此token確實存在而且沒有過時,則能夠經過訪問。若是token不存在或後臺判斷已過時,則會跳轉到登陸頁面,要求用戶從新登陸獲取token。vue
作法一
java
在用戶登陸成功的回調中將後臺返回的token直接存儲到localStorage,而後同步配置請求默認參數的形式將token取出放入headers中傳給後臺。代碼以下:ios
let axiosOptions = {
method,
url,
data,
timeout,
// 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'。default json
responseType,
// 請求頭內追加authToken屬性
headers: {
authtToken: window.localStorage.getItem(`base/token$$`)
}
}
複製代碼
作法二
vuex
當前項目中使用axios.interceptors.request.use設置發送請求前的攔截,直接將token塞入req.headers.authToken中,做爲全局傳入。代碼以下:json
// axios.interceptors.request.use 請求攔截:配置發送請求的信息
// axios.interceptors.response.use 響應攔截:配置請求回來的信息
axios.interceptors.request.use(req => {
req.headers.authToken = window.localStorage.getItem(`base/token$$`)
return req
}, error => {
return Promise.reject(error)
})
複製代碼
登陸涉及到的知識點axios
上面已經說到,頁面權限控制又分爲兩種:segmentfault
先看菜單的頁面訪問權限
後端
實現頁面訪問權限又可分爲如下兩種方案:
前者的缺點很明顯,每次路由跳轉都要作一遍檢驗是對計算資源的浪費,另外對於用戶無權訪問的路由,理論上就不該該掛載。 後者解決了上述問題,但按需掛載路由就須要知道用戶的路由權限,也就是在用戶登陸進來的時候就要知道當前用戶擁有哪些路由權限。 因此確定是方案二比較符合良好的用戶體驗。
項目中的菜單權限控制
1.權限涉及到的meta屬性
2.router.beforeEach()攔截路由的鉤子
3.router.addRoutes()
按鈕級權限控制(Vue指令v-permission)
使用示例:
<el-button @click="handleClick" v-permission:moduleName.post>新增</el-button>
<el-button @click="handleClick" v-permission.delete="moduleName">刪除</el-button>
複製代碼
最後再加上請求控制做爲最後一道防線,路由可能配置失誤,按鈕可能忘了加權限,這種時候請求控制能夠用來兜底,越權請求將在前端被攔截。