vue路由權(quán)限和按鈕權(quán)限的實(shí)現(xiàn)示例
一 菜單路由權(quán)限
1.1前端路由配置表
1.2后端數(shù)據(jù)返回
1.3 拿到數(shù)據(jù)后存到vuex
1.4 扁平化的目的是為了跳轉(zhuǎn)路由時(shí)進(jìn)行對(duì)比權(quán)限
//扁平化方法 flatten(data) { return data.reduce((arr,{name,id,resourceType,dimensionTypeCode,btnPermissions,path,children = [],}) => arr.concat([{name,id,resourceType,dimensionTypeCode,btnPermissions,path,},], this.flatten(children) ),[]); },
1.5 el-menu中直接拿到vuex中的數(shù)據(jù)進(jìn)行渲染 sidebar-item組件的代碼就不貼了
<el-menu :default-active="activeMenu" :collapse="isCollapse" :unique-opened="false" :collapse-transition="false" mode="vertical" > <sidebar-item v-for="(route,index) in productMenuList" :key="index" :item="route" :base-path="route.path" /> </el-menu> //js部分 computed: { productMenuList() { if(this.$store.state.user.user.userMenu){ return this.$store.state.user.user.userMenu; } }, },
1.6 router跳轉(zhuǎn)攔截判斷
router.beforeEach((to, _from, next) => { document.title = "后臺(tái)系統(tǒng)-" + to.meta.title // 動(dòng)態(tài)title if (whiteList.includes(to.path)) { next(); } else { if (storageLocal.getItem("token")) { if (hasPermission(to, store.state.user.user.menuTile)) { next(); } else { next('/error/404') } } else { next({ path: "/login", query: { redirect: to.fullPath } }) } } }) //獲取是否有當(dāng)前跳轉(zhuǎn)的菜單權(quán)限 function hasPermission(router, accessMenu) { let menu = getMenuByPath(router.path, accessMenu); if (menu.path) { return true; } return false; }
1.7 getMenuBypath方法
這里我是拿path進(jìn)行比對(duì)的,也可以拿name,只要是路由中唯一的都可以;
export const getMenuByPath = function (path, accessMenu) { if (accessMenu) { let filter = accessMenu.filter(res => { return res.path == path; }) return filter.length > 0 ? filter[0] : {} } }
二 按鈕權(quán)限的實(shí)現(xiàn)
2.1后端返回的數(shù)據(jù)還是??那份
2.2 封裝自定義指令,新建hasPermissionbtn.js
import router from '../../router' import store from '../../store' export default (Vue) => { /**自定義按鈕權(quán)限指令 */ Vue.directive('has', { mounted(el, binding) { //從配置獲取用戶按鈕權(quán)限 let path = router.currentRoute.value.path; let menu = getMenuByPath(path, store.state.user.user.menuTile); //獲取按鈕權(quán)限 if (!Vue.config.globalProperties.$_has(binding.value, menu.btnPermissions)){ //移除不匹配的元素 el.parentNode.removeChild(el) // el.setAttribute("disabled",true) } }, }) //檢查權(quán)限方法 Vue.config.globalProperties.$_has = function (value, btnPermissions) { let isExist = false //有權(quán)限的按鈕集合; let btnPermsArr = [] if (btnPermissions) { btnPermsArr = btnPermissions; } if (btnPermsArr.includes(value)) { isExist = true } return isExist } }
2.3 權(quán)限按鈕中的使用
//v-has可以使用在任何元素上,如div或者el-table-column標(biāo)簽 <el-button type="text" v-has="'env:account'">關(guān)聯(lián)</el-button>
到此這篇關(guān)于vue路由權(quán)限和按鈕權(quán)限的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)vue路由權(quán)限和按鈕權(quán)限內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Vue自定義指令實(shí)現(xiàn)按鈕級(jí)的權(quán)限控制的示例代碼
- vue3實(shí)現(xiàn)按鈕權(quán)限管理的項(xiàng)目實(shí)踐
- vue3?自定義指令控制按鈕權(quán)限的操作代碼
- vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理
- vue使用自定義指令來(lái)控制頁(yè)面按鈕組的權(quán)限思想
- vue使用自定義指令實(shí)現(xiàn)按鈕權(quán)限展示功能
- vue 按鈕 權(quán)限控制介紹
- Vue實(shí)現(xiàn)按鈕級(jí)權(quán)限方案
- Vue按鈕權(quán)限的實(shí)現(xiàn)示例
相關(guān)文章
vue項(xiàng)目實(shí)現(xiàn)圖形驗(yàn)證碼
這篇文章主要為大家詳細(xì)介紹了vue項(xiàng)目實(shí)現(xiàn)圖形驗(yàn)證碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-04-04vue項(xiàng)目使用md5加密、crypto-js加密、國(guó)密sm3及國(guó)密sm4的方法
密碼或者其他比較重要東西假如使用明文傳輸中是很危險(xiǎn)的,所以就需要前端一些加密協(xié)議,對(duì)密碼、手機(jī)號(hào)、身份證號(hào)等信息進(jìn)行保護(hù),下面這篇文章主要給大家介紹了關(guān)于vue項(xiàng)目中使用md5加密、crypto-js加密、國(guó)密sm3及國(guó)密sm4的相關(guān)資料,需要的朋友可以參考下2022-12-12vue在App.vue文件中監(jiān)聽(tīng)路由變化刷新頁(yè)面操作
這篇文章主要介紹了vue在App.vue文件中監(jiān)聽(tīng)路由變化刷新頁(yè)面操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-08-08vue3.2?reactive函數(shù)問(wèn)題小結(jié)
reactive用來(lái)包裝一個(gè)對(duì)象,使其每個(gè)對(duì)象屬性都具有響應(yīng)性(也就是深層次響應(yīng)式),這篇文章主要介紹了vue3.2?reactive函數(shù)注意點(diǎn)及問(wèn)題小結(jié),需要的朋友可以參考下2022-12-12vue中動(dòng)態(tài)設(shè)置meta標(biāo)簽和title標(biāo)簽的方法
這篇文章主要介紹了vue中動(dòng)態(tài)設(shè)置meta標(biāo)簽和title標(biāo)簽的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07vue3+echarts+折線投影(陰影)效果的實(shí)現(xiàn)
這篇文章主要介紹了vue3+echarts+折線投影(陰影)效果的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10vue+tp5實(shí)現(xiàn)簡(jiǎn)單登錄功能
這篇文章主要為大家詳細(xì)介紹了vue+tp5實(shí)現(xiàn)簡(jiǎn)單登錄功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-11-11