基于Vue自定義指令實現(xiàn)按鈕級權(quán)限控制思路詳解
思路:
- 登錄:當(dāng)用戶填寫完賬號和密碼后向服務(wù)端驗證是否正確,驗證通過之后,服務(wù)端會返回一個token,拿到token之后(我會將這個token存貯到sessionStorage中,保證刷新頁面后能記住用戶登錄狀態(tài)),前端會根據(jù)token再去拉取一個 user_info 的接口來獲取用戶的詳細(xì)信息(如用戶權(quán)限,用戶名等等信息)。
- 權(quán)限驗證:通過token獲取用戶對應(yīng)的 role,自定義指令,獲取路由meta屬性里btnPermissions( 注: meta.btnPermissions是存放按鈕權(quán)限的數(shù)組,在路由表里配置 ),然后判斷role是否在btnPermissions數(shù)組里,若不在即刪除該按鈕DOM。
按鈕權(quán)限也可以用v-if判斷,但是如果頁面過多,每個頁面頁面都要獲取用戶權(quán)限r(nóng)ole和路由表里的meta.btnPermissions,然后再做判斷,感覺有點麻煩,而自定義指令,只需在權(quán)限按鈕加入該指令即可。
廢話不多說,上代碼...
路由配置:
path: '/permission', component: Layout, name: '權(quán)限測試', meta: { btnPermissions: ['admin','supper','normal'] }, //頁面需要的權(quán)限 children: [ { path: 'supper', component: _import('system/supper'), name: '權(quán)限測試頁', meta: { btnPermissions: ['admin','supper'] } //頁面需要的權(quán)限 }, { path: 'normal', component: _import('system/normal'), name: '權(quán)限測試頁', meta: { btnPermissions: ['admin'] } //頁面需要的權(quán)限 } ]
自定義指令:
import Vue from 'vue' /**權(quán)限指令**/ const has = Vue.directive('has', { bind: function (el, binding, vnode) { // 獲取按鈕權(quán)限 let btnPermissions = vnode.context.$route.meta.btnPermissions.split(","); if (!Vue.prototype.$_has(btnPermissions)) { el.parentNode.removeChild(el); } } }); // 權(quán)限檢查方法 Vue.prototype.$_has = function (value) { let isExist = false; let btnPermissionsStr = sessionStorage.getItem("btnPermissions"); if (btnPermissionsStr == undefined || btnPermissionsStr == null) { return false; } if (value.indexOf(btnPermissionsStr) > -1) { isExist = true; } return isExist; }; export {has}
然后在main.js文件引入文件
import has from './public/js/btnPermissions.js';
頁面中按鈕只需加v-has即可
<el-button @click='editClick' type="primary" v-has>編輯</el-button>
結(jié)語:
權(quán)限這種事需要前后端結(jié)合,前端盡可能的去控制,記?。河肋h(yuǎn)不相信用戶輸入!
以上所述是小編給大家介紹的基于Vue自定義指令實現(xiàn)按鈕級權(quán)限控制,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
相關(guān)文章
快速解決electron-builder打包時下載依賴慢的問題
使用 Electron-builder 打包,有時會在下載Electron、nsis、winCodeSign的過程中 Timeout 導(dǎo)致打包失敗,本文給大家分享快速解決electron-builder打包時下載依賴慢的問題,感興趣的朋友一起看看吧2024-02-02前端架構(gòu)vue動態(tài)組件使用基礎(chǔ)教程
這篇文章主要為大家介紹了前端架構(gòu)vue動態(tài)組件使用的基礎(chǔ)教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-02-02詳解vue之自行實現(xiàn)派發(fā)與廣播(dispatch與broadcast)
這篇文章主要介紹了詳解vue之自行實現(xiàn)派發(fā)與廣播(dispatch與broadcast),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Vue mock.js模擬數(shù)據(jù)實現(xiàn)首頁導(dǎo)航與左側(cè)菜單功能
這篇文章主要介紹了Vue mock.js模擬數(shù)據(jù)實現(xiàn)首頁導(dǎo)航與左側(cè)菜單功能,mockjs是用來模擬產(chǎn)生一些虛擬的數(shù)據(jù),可以讓前端在后端接口還沒有開發(fā)出來時獨立開發(fā)。我們可以使用真實的url,mockjs可以攔截ajax請求,返回設(shè)定好的數(shù)據(jù)2022-09-09