Vue項(xiàng)目實(shí)現(xiàn)簡單的權(quán)限控制管理功能
在Vue項(xiàng)目中實(shí)現(xiàn)權(quán)限控制管理
對于一般稍大一些的后臺管理系統(tǒng),往往有很多個(gè)人員需要使用,而不同的人員也對應(yīng)了不同的權(quán)限系統(tǒng),后端的權(quán)限校驗(yàn)保障了系統(tǒng)的安全性,而前端的權(quán)限校驗(yàn)則提供了優(yōu)秀的交互體驗(yàn)。
校驗(yàn)方式
前端對用戶的權(quán)限信息進(jìn)行校驗(yàn)往往在兩個(gè)方面進(jìn)行限制
- 路由不可見
- 元素不可見
通過以上兩個(gè)方式,來將用戶權(quán)限之外的內(nèi)容隱藏掉。
路由不可見實(shí)現(xiàn)方法
在router.js中的meta字段中加入該路由的訪問權(quán)限列表
{
path: 'edit',
name: 'edit',
meta: {
title: '編輯賬戶',
auths:['edit_account']
},
component: () => import('pathToComponent/component.vue'),
},
Vue.router中提供了導(dǎo)航守衛(wèi),我們這里使用 全局前置守衛(wèi) 對路由跳轉(zhuǎn)進(jìn)行權(quán)限校驗(yàn)
router.beforeEach(to,from,next)
參數(shù) to 是即將進(jìn)入的路由對象,我們可以在對象中拿到之前在router.js中定義的 route 對象,并獲得 auths 字段
router.beforeEach((to,from,next)=>{
const hasAuth = function(needAuths,haveAuths){ //判斷用戶是否擁有權(quán)限的function
// implement
}
const havaAuths = []; // 用戶擁有的權(quán)限列表
if(!hasAuth(to.meta.auths,haveAuths)){
//沒有權(quán)限重定位到其他頁面,往往是401頁面
next({replace:true,name:'otherRouteName'})
}
//權(quán)限校驗(yàn)通過,跳轉(zhuǎn)至對應(yīng)路由
next();
})
在有側(cè)邊欄的后臺管理中,還需要對側(cè)邊欄的路由導(dǎo)航進(jìn)行隱藏,這里同樣是通過拿到 route.meta.auths 字段進(jìn)行過濾。
元素不可見實(shí)現(xiàn)方法
因?yàn)槟承╉撁嬷袝幸恍┨厥獾慕涌谡{(diào)用或數(shù)據(jù)展示受到權(quán)限控制顯示。前端通過控制元素的展示來隱藏掉用戶不具有權(quán)限的元素,避免點(diǎn)擊了某一個(gè)button導(dǎo)致接口401報(bào)錯(cuò)這樣不友好的交互體驗(yàn)。
全局注冊一個(gè)directive, directive官網(wǎng)介紹 。
//acl.js
const aclDirective = {
inserted:function(el,binding){ // 在被綁定的元素插入到dom中時(shí)
const hasAuth = function(needAuths,haveAuths){ //判斷用戶是否擁有權(quán)限的function
// implement
}
const havaAuths = []; // 用戶擁有的權(quán)限列表
if(!hasAuth(binding.value,haveAuths)){ //binding.value 可以獲得綁定指令時(shí)傳入的參數(shù)
el.style = "display:none"; //修改元素的可見狀態(tài)
}
}
}
//main.js
Vue.directive('acl',aclDirective); //全局注冊指令
在需要控制顯示的組件上我們就可以通過 v-acl 進(jìn)行權(quán)限控制
<button v-acl="['edit_access']">編輯賬戶</button>
總結(jié)
以上所述是小編給大家介紹的Vue項(xiàng)目實(shí)現(xiàn)簡單的權(quán)限控制管理功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
相關(guān)文章
vue.js 實(shí)現(xiàn)點(diǎn)擊div標(biāo)簽時(shí)改變樣式
這篇文章主要介紹了vue.js 實(shí)現(xiàn)點(diǎn)擊div標(biāo)簽時(shí)改變樣式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-08-08
vue.js實(shí)現(xiàn)條件渲染的實(shí)例代碼
這篇文章主要介紹了vue.js實(shí)現(xiàn)條件渲染的實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06
Vue.js手風(fēng)琴菜單組件開發(fā)實(shí)例
這篇文章主要為大家詳細(xì)介紹了Vue.js手風(fēng)琴菜單組件開發(fā)實(shí)例,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
教你用vue實(shí)現(xiàn)一個(gè)有趣的圍繞圓弧動(dòng)畫效果
最近做的兩個(gè)項(xiàng)目都是關(guān)于vue的,做完整理一下,這篇文章主要給大家介紹了關(guān)于如何用vue實(shí)現(xiàn)一個(gè)有趣的圍繞圓弧動(dòng)畫效果的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
Vue實(shí)現(xiàn)關(guān)聯(lián)頁面多級跳轉(zhuǎn)(頁面下鉆)功能的完整實(shí)例
這篇文章主要給大家介紹了關(guān)于Vue實(shí)現(xiàn)關(guān)聯(lián)頁面多級跳轉(zhuǎn)(頁面下鉆)功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
JavaScript的MVVM庫Vue.js入門學(xué)習(xí)筆記
這篇文章主要介紹了JavaScript的MVVM庫Vue.js入門學(xué)習(xí)筆記,Vue.js是一個(gè)新興的js庫,主要用于實(shí)現(xiàn)響應(yīng)的數(shù)據(jù)綁定和組合的視圖組件,需要的朋友可以參考下2016-05-05
Vue引入使用localforage改進(jìn)本地離線存儲方式(突破5M限制)
這篇文章主要介紹了Vue引入使用localforage改進(jìn)本地離線存儲方式(突破5M限制),具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue3解決Mockjs引入后并訪問404(Not Found) 的頁面報(bào)錯(cuò)問題
mock.js:是一款模擬數(shù)據(jù)生成器,可以生成隨機(jī)數(shù)據(jù),攔截 Ajax 請求,使用mockjs模擬后端接口,可隨機(jī)生成所需數(shù)據(jù),模擬對數(shù)據(jù)的增刪改查,本文給大家介紹了Vue3解決Mockjs引入后并訪問404(Not Found) 的頁面報(bào)錯(cuò)問題,需要的朋友可以參考下2025-04-04

