欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue 實現(xiàn)前端權(quán)限控制的示例代碼

 更新時間:2019年07月09日 14:35:22   作者:anonymity  
這篇文章主要介紹了Vue 實現(xiàn)前端權(quán)限控制的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

登錄&&權(quán)限流程圖

前言

首先我們確定的權(quán)限控制分為三大部分,其中根據(jù)粒度大小分的更細:

  • 登錄權(quán)限控制
  • 頁面權(quán)限控制
    • 菜單中的頁面是否可以被訪問
    • 頁面中的按鈕 (增、刪、改、查)的權(quán)限控制是否顯示
  • 接口權(quán)限控制

一、登錄權(quán)限控制

登錄訪問權(quán)限控制是對用戶的校驗。在用戶登錄成功之后,后臺將返回一個token,之后前端每次進行接口請求的時候,都要帶上這個token。后臺拿到這個token后進行判斷,如果此token確實存在并且沒有過期,則可以通過訪問。如果token不存在或后臺判斷已過期,則會跳轉(zhuǎn)到登錄頁面,要求用戶重新登錄獲取token。

做法一

在用戶登錄成功的回調(diào)中將后臺返回的token直接存儲到localStorage,然后同步配置請求默認參數(shù)的形式將token取出放入headers中傳給后臺。代碼如下:

  let axiosOptions = {
   method,
   url,
   data,
   timeout,
   // 'arraybuffer', 'blob', 'document', 'json', 'text', 'stream'。default json
   responseType,
   // 請求頭內(nèi)追加authToken屬性
   headers: {
    authtToken: window.localStorage.getItem(`base/token$$`)
   }
  }

做法二

當前項目中使用axios.interceptors.request.use設(shè)置發(fā)送請求前的攔截,直接將token塞入req.headers.authToken中,作為全局傳入。代碼如下:

// axios.interceptors.request.use 請求攔截:配置發(fā)送請求的信息
// axios.interceptors.response.use 響應(yīng)攔截:配置請求回來的信息

axios.interceptors.request.use(req => {
 req.headers.authToken = window.localStorage.getItem(`base/token$$`)
 return req
}, error => {
 return Promise.reject(error)
})

登錄涉及到的知識點

  • vuex + localStorage: 本地通過vuex+localStorage持久化存儲token(token:服務(wù)端創(chuàng)建用于唯一標識用戶身份的Key)。
  • axios: 請求攔截驗證token,可以使用axios的API:axios.interceptors.request.use,也可以通過添加默認參數(shù)的形式在請求頭中追加token。

二、頁面權(quán)限控制

上面已經(jīng)說到,頁面權(quán)限控制又分為兩種:

  • 菜單中的頁面是否可以被訪問
  • 頁面中的按鈕 (增、刪、改、查)的權(quán)限控制是否顯示

先看菜單的頁面訪問權(quán)限

實現(xiàn)頁面訪問權(quán)限又可分為以下兩種方案:

  • 方案一、初始化即掛載全部路由,每次路由跳轉(zhuǎn)前做校驗
  • 方案二、只掛載當前用戶擁有的路由,如果用戶通過URL進行強制訪問,則會直接進入404,相當于從源頭上做了控制

前者的缺點很明顯,每次路由跳轉(zhuǎn)都要做一遍檢驗是對計算資源的浪費,另外對于用戶無權(quán)訪問的路由,理論上就不應(yīng)該掛載。

后者解決了上述問題,但按需掛載路由就需要知道用戶的路由權(quán)限,也就是在用戶登錄進來的時候就要知道當前用戶擁有哪些路由權(quán)限。

所以肯定是方案二比較符合良好的用戶體驗。

項目中的菜單權(quán)限控制

1.權(quán)限涉及到的meta屬性

  • noRequireAuth: true 無需權(quán)限直接掛載
  • manageFree: true 不在操作權(quán)限樹中展示

2.router.beforeEach()攔截路由的鉤子

  • 不需要權(quán)限的路由直接放行。meta內(nèi)noRequireAuth和manageFree不受權(quán)限控制
  • 進入路由前,從后端請求獲取需要展示的菜單。后端根據(jù)token判斷當前用戶權(quán)限,返回對應(yīng)菜單。前端遞歸對比確定最終要顯示的菜單列表

3.router.addRoutes()

  • 通過router.addRoutes()動態(tài)添加所有符合權(quán)限的路由

按鈕級權(quán)限控制(Vue指令v-permission)

1.每個模塊對應(yīng)有四種權(quán)限,查詢(get),添加(post),更新(put),刪除(delete)
2.利用十進制和二進制來表示當前模塊所擁有的權(quán)限。1111(15),轉(zhuǎn)換后的二進制與權(quán)限的關(guān)系表示:從右至左數(shù)(1代表擁有該權(quán)限,0代表不擁有),第一位代表查詢,第二位代表添加,第三位代表更新,第四位代表刪除。如eg:二進制1111(15),代表用于查詢,添加,更新,刪除四種權(quán)限。

3.判斷對應(yīng)模塊沒有此權(quán)限時,移除當前按鈕dom元素。

使用示例:

 <el-button @click="handleClick" v-permission:moduleName.post>新增</el-button>
 <el-button @click="handleClick" v-permission.delete="moduleName">刪除</el-button>

三、接口訪問權(quán)限控制

最后再加上請求控制作為最后一道防線,路由可能配置失誤,按鈕可能忘了加權(quán)限,這種時候請求控制可以用來兜底,越權(quán)請求將在前端被攔截。

前后端約定接口采用RESTful風格,同樣對應(yīng)四種權(quán)限,包括查詢(get),添加(post),更新(put),刪除(delete)。對于查詢操作,正常如果參數(shù)只有一個,應(yīng)該用get請求,如果有多個參數(shù),需要改為post請求,但是需要在url后面添加/query以告訴服務(wù)端當前進行的是查詢操作,用于和正常的添加(post)請求區(qū)分。同樣的是,刪除用戶時如果有多個參數(shù),DELETE請求同樣改為POST請求,在后面添加/delete用于和正常的刪除(delete)操作進行區(qū)分。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue中的stylus及stylus-loader版本問題

    vue中的stylus及stylus-loader版本問題

    這篇文章主要介紹了vue中的stylus及stylus-loader版本問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue基于localStorage存儲信息代碼實例

    Vue基于localStorage存儲信息代碼實例

    這篇文章主要介紹了Vue基于localStorage存儲信息代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • Vue.JS入門教程之自定義指令

    Vue.JS入門教程之自定義指令

    這篇文章主要為大家詳細介紹了Vue.JS入門教程之自定義指令,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 手摸手教你實現(xiàn)Vue3 Reactivity

    手摸手教你實現(xiàn)Vue3 Reactivity

    本文主要介紹了手摸手教你實現(xiàn)Vue3 Reactivity,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • element--Diaolog彈窗打開之后渲染組件方式

    element--Diaolog彈窗打開之后渲染組件方式

    這篇文章主要介紹了element--Diaolog彈窗打開之后渲染組件方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • Vue使用vue-cli創(chuàng)建項目

    Vue使用vue-cli創(chuàng)建項目

    這篇文章主要介紹了Vue使用vue-cli創(chuàng)建項目,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 詳解Vue3?父組件調(diào)用子組件方法($refs?在setup()、<script?setup>?中使用)

    詳解Vue3?父組件調(diào)用子組件方法($refs?在setup()、<script?setup>?中使用)

    這篇文章主要介紹了Vue3?父組件調(diào)用子組件方法($refs?在setup()、<script?setup>?中使用),在 vue2 中 ref 被用來獲取對應(yīng)的子元素,然后調(diào)用子元素內(nèi)部的方法,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • 詳解Vue底部導(dǎo)航欄組件

    詳解Vue底部導(dǎo)航欄組件

    這篇文章主要介紹了Vue底部導(dǎo)航欄的詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05
  • VUE腳手架框架編寫簡潔的登錄界面的實現(xiàn)

    VUE腳手架框架編寫簡潔的登錄界面的實現(xiàn)

    本文主要介紹了VUE腳手架框架編寫簡潔的登錄界面的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-08-08
  • 深入了解vue-router原理并實現(xiàn)一個小demo

    深入了解vue-router原理并實現(xiàn)一個小demo

    這篇文章主要為大家詳細介紹了vue-router原理并實現(xiàn)一個小demo,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03

最新評論