<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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:01:59
        文檔

        vue權限管理系統的實現代碼

        vue權限管理系統的實現代碼:后臺管理系統一般都會有權限模塊,用來控制用戶能訪問哪些頁面和哪些數據接口。大多數管理系統的頁面都長這樣。 左邊為菜單,分為兩級,右邊為圖表顯示區域,有增刪改查的按鈕。 表的結構 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;
        推薦度:
        導讀vue權限管理系統的實現代碼:后臺管理系統一般都會有權限模塊,用來控制用戶能訪問哪些頁面和哪些數據接口。大多數管理系統的頁面都長這樣。 左邊為菜單,分為兩級,右邊為圖表顯示區域,有增刪改查的按鈕。 表的結構 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;

        后臺管理系統一般都會有權限模塊,用來控制用戶能訪問哪些頁面和哪些數據接口。大多數管理系統的頁面都長這樣。

        左邊為菜單,分為兩級,右邊為圖表顯示區域,有增刪改查的按鈕。

        表的結構

        SET NAMES utf8mb4;
        SET FOREIGN_KEY_CHECKS = 0;
        
        -- ----------------------------
        -- Table structure for t_auth_rule
        -- ----------------------------
        DROP TABLE IF EXISTS `t_auth_rule`;
        CREATE TABLE `t_auth_rule` (
         `id_pk` bigint(20) NOT NULL AUTO_INCREMENT,
         `auth_id` varchar(128) NOT NULL COMMENT '權限Id',
         `pauth_id` varchar(128) DEFAULT NULL COMMENT '父級Id',
         `auth_name` varchar(255) NOT NULL COMMENT '權限名稱',
         `auth_icon` varchar(255) NOT NULL COMMENT '權限圖標',
         `auth_type` smallint(6) NOT NULL COMMENT '權限類型,BIT表示其屬性\r\n 0x00表示可顯示的菜單權限節點;\r\n 0x01表示普通節點',
         `auth_condition` text COMMENT '條件',
         `remark` varchar(255) DEFAULT NULL COMMENT '備注',
         `is_menu` smallint(255) DEFAULT '0' COMMENT '是否為菜單,0表示非,1表示是',
         `weight` int(11) NOT NULL DEFAULT '0' COMMENT '權重',
         `rule` varchar(256) DEFAULT NULL COMMENT '規則路徑主要對應菜單或方法的路徑名稱',
         `cr_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創建時間',
         `up_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時間',
         PRIMARY KEY (`id_pk`),
         UNIQUE KEY `AK_auth_id` (`auth_id`)
        ) ENGINE=InnoDB AUTO_INCREMENT=264 DEFAULT CHARSET=utf8 COMMENT='權限規則表,記錄權限相關的信息,權限以父子關系存在,菜單是權限的一種。';
        
        SET FOREIGN_KEY_CHECKS = 1;
        
        
        SET NAMES utf8mb4;
        SET FOREIGN_KEY_CHECKS = 0;
        
        -- ----------------------------
        -- Table structure for t_role_auth
        -- ----------------------------
        DROP TABLE IF EXISTS `t_role_auth`;
        CREATE TABLE `t_role_auth` (
         `id_pk` bigint(20) NOT NULL AUTO_INCREMENT,
         `role_id_fk` varchar(32) DEFAULT NULL COMMENT '角色id',
         `auth_id_fk` varchar(128) DEFAULT NULL COMMENT '權限id',
         `aa` varchar(255) DEFAULT NULL,
         PRIMARY KEY (`id_pk`)
        ) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 COMMENT='角色與權限的關系表';
        
        SET FOREIGN_KEY_CHECKS = 1;

        對于菜單的權限,通過路由表匹配

        addRouters(menuMap) {
         let routerArr = [];
         for (let j = 0; j < routerList.length; j++) {
         let obj;
         if (menuMap['AuthRule::' + routerList[j].path]) { // 找到一級菜單
         obj = {
         path: routerList[j].path,
         component: routerList[j].component,
         redirect: routerList[j].redirect,
         name: routerList[j].name,
         meta: routerList[j].meta,
         children: []
         };
        
         if (routerList[j].children.length) {
         for (let k = 0; k < routerList[j].children.length; k++) {
         let _fullpath = routerList[j].children[k].path
         if (routerList[j].children[k].meta) {
         _fullpath = routerList[j].children[k].meta.parentPath + '/' + _fullpath 
         }
         if (menuMap['AuthRule::' + _fullpath]) { // 找到二級菜單
         obj.children.push(routerList[j].children[k]);
         }
         }
         }
         }
         if (obj) {
         routerArr.push(obj);
         this.$router.options.routes.push(obj);
         }
         }
        
         storage.set("routerArr", routerArr);
         this.$router.addRoutes(routerArr);
         this.$router.push({ path: "/" });
        },

        menuMap為登錄時獲取的權限菜單,是一個對象; routerList為前端定義的路由表;遍歷routerList,如果routerList的key在menuMap里能找到的話,就表示該路由存在。最后生成一個過濾后的路由表,用vue提供的addRoutes方法動態添加到路由中,并把過濾后的路由表存到本地。

        const menuMap = {
         '/dashboard': {path: '/dashboard', name: '首頁'}
        }
        const routerList = [
         {path: '/dashboard', name: '首頁', component: ..}
        ]

        在頁面刷新的時候,從本地獲取路由表,添加到路由表中,代碼如下,constRouterArr為基礎路由表,比如登錄,404等

        const routerList = storage.get('routerArr')
        const routerArr = constRouterArr.concat(routerList);

        對于按鈕的權限

        if (res.data.auth_rule_map) {
         let obj = {}
         Object.keys(res.data.auth_rule_map).forEach(i => {
         // 將所有的按鈕放到一個obj里 key 為接口地址 
         if (res.data.auth_rule_map[i].is_menu === 0) { // 如果是按鈕
         obj[res.data.auth_rule_map[i].rule] = 1
         } 
         })
         storage.set("btnList", obj);
         storage.set("menuTree", res.data.auth_rule_map);
        }

        auth_rule_map為接口返回權限map,把按鈕的權限過濾出來存到本地。

        將map添加到每個路由組件的data里,(這里有一個問題,怎么判斷一個組件是否是路由組件),目前想到的是通過組件name來判斷,把所有的路由組件放到一個數組里做判斷。

        在組件內部的按鈕上加上v-if,如果this.uri__里的uri在uriMap里存在就顯示。

        也可以通過方法來判斷,如下面的__isBtnShow,不僅可以控制按鈕的顯示隱藏,還可以控制其樣式,比如顏色等,更加靈活,推薦使用方法來控制

        uri = {
         ADD_MEMBER: '/api/add_member'
        }
        
        export default function install (Vue) {
         const uriMap = storage.get('btnList')
         //uriMap['/admin/api/auth_rule/update_auth_rule.action'] = 1
         Vue.mixin({
         created() {
         const arr = ['MemberManage', 'PayManage', '...']
         if (arr.indexOf(this.$options.name) !== -1) {
         this.dataUri__ = uriMap
         this.uri__ = uri 
         }
         },
         data() {
         return {
         dataUri__: {}
         }
         },
         })
        }
        
        <Button v-if="dataUri__[uri__.ADD_MEMBER]">添加會員</Button>

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

        文檔

        vue權限管理系統的實現代碼

        vue權限管理系統的實現代碼:后臺管理系統一般都會有權限模塊,用來控制用戶能訪問哪些頁面和哪些數據接口。大多數管理系統的頁面都長這樣。 左邊為菜單,分為兩級,右邊為圖表顯示區域,有增刪改查的按鈕。 表的結構 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;
        推薦度:
        標簽: VUE 權限 管理
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: GOGOGO高清免费看韩国| 午夜亚洲国产精品福利| 亚洲电影免费在线观看| 亚洲美女又黄又爽在线观看| 免费国产黄网站在线观看动图| 免费va在线观看| 免费国产va在线观看| 精品亚洲一区二区三区在线观看 | 中文字幕在线观看免费视频| 久久精品a亚洲国产v高清不卡| 精品无码AV无码免费专区| 亚洲成人福利在线| 国产精品成人免费视频网站京东 | 亚洲成a人片在线观看精品| 欧美三级在线电影免费| 亚洲国产精品成人综合色在线| 成人免费无码精品国产电影| 四虎影视永久在线精品免费| 亚洲精品乱码久久久久久蜜桃不卡 | 久久精品国产亚洲AV无码麻豆| 久久国产免费观看精品3| 亚洲人成电影在线观看网| 精品国产免费观看久久久| 午夜肉伦伦影院久久精品免费看国产一区二区三区 | 亚洲一级特黄大片无码毛片| 久久久精品视频免费观看 | 中文字幕亚洲图片| 99久久久国产精品免费牛牛| 亚洲久悠悠色悠在线播放| 免费一级毛片在级播放| 你懂的免费在线观看| 亚洲色av性色在线观无码| 成人黄页网站免费观看大全| 免费人成网上在线观看| 亚洲国产精品一区二区久久| 成人毛片免费播放| 在线观看特色大片免费网站| 亚洲综合激情五月丁香六月| 亚洲综合伊人久久大杳蕉| 国产福利在线观看免费第一福利| 免费在线人人电影网|