• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    vue中如何實現后臺管理系統的權限控制的方法示例

    來源:懂視網 責編:小采 時間:2020-11-27 22:07:29
    文檔

    vue中如何實現后臺管理系統的權限控制的方法示例

    vue中如何實現后臺管理系統的權限控制的方法示例:一、前言 在廣告機項目中,角色的權限管理是卡了挺久的一個難點。首先我們確定的權限控制分為兩大部分,其中根據粒的大小分的更細: 接口訪問的權限控制 頁面的權限控制 菜單中的頁面是否能被訪問 頁面中的按鈕(增、刪、改)的權限控制是否顯示 權限
    推薦度:
    導讀vue中如何實現后臺管理系統的權限控制的方法示例:一、前言 在廣告機項目中,角色的權限管理是卡了挺久的一個難點。首先我們確定的權限控制分為兩大部分,其中根據粒的大小分的更細: 接口訪問的權限控制 頁面的權限控制 菜單中的頁面是否能被訪問 頁面中的按鈕(增、刪、改)的權限控制是否顯示 權限

    那我們現在就可以開始使用addRoutes進行路由匹配了。下面看代碼:

    // router/index.js
    /**
     * 根據權限匹配路由
     * @param {array} permission 權限列表(菜單列表)
     * @param {array} asyncRouter 異步路由對象
     */
    function routerMatch(permission, asyncRouter) {
     return new Promise((resolve) => {
     const routers = [];
     // 創建路由
     function createRouter(permission) {
     // 根據路徑匹配到的router對象添加到routers中即可
     permission.forEach((item) => {
     if (item.children && item.children.length) {
     createRouter(item.children)
     }
     let path = item.path;
     // 循環異步路由,將符合權限列表的路由加入到routers中
     asyncRouter.find((s) => {
     if (s.path === '') {
     s.children.find((y) => {
     if (y.path === path) {
     y.meta.permission = item.permission;
     routers.push(s);
     }
     })
     }
     if (s.path === path) {
     s.meta.permission = item.permission;
     routers.push(s);
     }
     })
     })
     }
    
     createRouter(permission)
     resolve([routers])
     })
    }

    然后我們編寫導航鉤子

    // router/index.js
    router.beforeEach((to, form, next) => {
     if (sessionStorage.getItem('token')) {
     if (to.path === '/') {
     router.replace('/index')
     } else {
     console.log(store.state.list.length);
     if (store.state.list.length === 0) {
     //如果沒有權限列表,將重新向后臺請求一次
     store.dispatch('getPermission').then(res => {
     //調用權限匹配的方法
     routerMatch(res, asyncRouterMap).then(res => {
     //將匹配出來的權限列表進行addRoutes
     router.addRoutes(res[0]);
     next(to.path)
     })
     }).catch(() => {
     router.replace('/')
     })
     } else {
     if (to.matched.length) {
     next()
     } else {
     router.replace('/')
     }
     }
     }
     } else {
     if (whiteList.indexOf(to.path) >= 0) {
     next()
     } else {
     router.replace('/')
     }
     }
    });

    到這里我們已經完成了對頁面訪問的權限控制,接下來我們來講解一下操作按扭的權限部分。

    四、數據操作權限

    是否還記得前面的路由配置中我們多出來的一個代碼,下面我們拿出來看看:

    //異步路由(需要權限的頁面)
    export const asyncRouterMap = [
    
     {
     path: '/resource',
     name: 'nav.Resource',
     meta: {
     permission: []
     },
     component: (resolve) => require(['@/components/Resource/resource'], resolve)
     },
     {
     path: '/template',
     name: 'nav.Template',
     meta: {
     permission: []
     },
     component: (resolve) => require(['@/components/Template/template'], resolve)
     },
     {
     path: '/generalSet',
     name: 'nav.System',
     meta: {
     permission: []
     },
     component: (resolve) => require(['@/components/SystemSet/generalSet'], resolve)
     },
     {
     path: '',
     name: 'nav.Log',
     component: App,
     children: [
     {
     path: '/userLog',
     name: 'nav.UserLog',
     meta: {
     permission: []
     },
     component: (resolve) => require(['@/components/Log/userLog'], resolve),
     },
     {
     path: '/operatingLog',
     name: 'nav.SystemLog',
     meta: {
     permission: []
     },
     component: (resolve) => require(['@/components/Log/operatingLog'], resolve),
     },
     ]
     }
     ]
    ];

    為每個路由頁面增加meta字段。在routerMatch函數中將匹配到的詳細權限字段賦值到這里。這樣在每個頁面的route對象中就會得到這個字段。

    asyncRouter.find((s) => {
     if (s.path === '') {
     s.children.find((y) => {
     if (y.path === path) {
     //賦值
     y.meta.permission = item.permission;
     routers.push(s);
     }
     })
     }
     if (s.path === path) {
     s.meta.permission = item.permission;
     routers.push(s);
     }
     })

    接下來我們編寫一個vue自定義指令對頁面中需要進行鑒權的元素進行判斷,比如類似這樣的:

    <a @click="upload" v-allow="'3'"></a> /* 3代表一個上傳權限的ID,權限中有3則顯示按鈕 */

    我們直接注冊一個全局指令,利用vnode來訪問vue的方法。代碼如下:

    //main.js
    //按扭權限指令
    Vue.directive('allow', {
     inserted: (el, binding, vnode) => {
     let permissionList = vnode.context.$route.meta.permission;
     if (!permissionList.includes(binding.value)) {
     el.parentNode.removeChild(el)
     }
     }
    })

    至此為止,權限控制流程就已經完全結束了,在最后我們再看一下完整的權限控制流程圖吧.

    五、路由控制完整流程圖

    vue權限控制

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    vue中如何實現后臺管理系統的權限控制的方法示例

    vue中如何實現后臺管理系統的權限控制的方法示例:一、前言 在廣告機項目中,角色的權限管理是卡了挺久的一個難點。首先我們確定的權限控制分為兩大部分,其中根據粒的大小分的更細: 接口訪問的權限控制 頁面的權限控制 菜單中的頁面是否能被訪問 頁面中的按鈕(增、刪、改)的權限控制是否顯示 權限
    推薦度:
    標簽: 方法 VUE 系統
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产久热精品无码激情| 91人妻人人澡人人爽人人精品| 国产精品嫩草影院一二三区入口| 青青草97国产精品免费观看| 国产精品视频一区二区噜噜 | 精品人妻系列无码天堂| 欧美成人精品第一区二区三区| 亚洲精品免费视频| 国产麻豆精品久久一二三| 亚洲精品午夜无码电影网| 久久午夜无码鲁丝片午夜精品| 国产精品videossex白浆| 99精品久久精品| 精品调教CHINESEGAY| 亚洲av无码国产精品色午夜字幕 | 午夜精品视频在线观看| 99精品人妻无码专区在线视频区 | 久99精品视频在线观看婷亚洲片国产一区一级在线 | 97久久精品无码一区二区天美| 亚洲国产精品高清久久久| 中文字幕精品亚洲无线码二区| 日本Aⅴ大伊香蕉精品视频 | 国产精品99无码一区二区| 亚洲视频精品在线| 四虎国产精品免费久久久| 久久精品中文字幕久久| 久久国产乱子精品免费女| 92国产精品午夜福利| 国产午夜精品免费一区二区三区| 久久久久人妻一区精品色| 亚洲精品国偷自产在线| 亚洲AV无码国产精品麻豆天美| 日韩国产成人精品视频| 欧美精品欧美人与动人物牲交| 无码精品人妻一区二区三区漫画 | 精品国产AV一区二区三区| 精品少妇人妻av无码久久| 国产精品原创巨作av女教师| 99re这里只有精品热久久| 999精品视频| 久久国产精品久久|