最新文章專題視頻專題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

vue權(quán)限管理系統(tǒng)的實(shí)現(xiàn)代碼

來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:01:59
文檔

vue權(quán)限管理系統(tǒng)的實(shí)現(xiàn)代碼

vue權(quán)限管理系統(tǒng)的實(shí)現(xiàn)代碼:后臺(tái)管理系統(tǒng)一般都會(huì)有權(quán)限模塊,用來(lái)控制用戶能訪問(wèn)哪些頁(yè)面和哪些數(shù)據(jù)接口。大多數(shù)管理系統(tǒng)的頁(yè)面都長(zhǎng)這樣。 左邊為菜單,分為兩級(jí),右邊為圖表顯示區(qū)域,有增刪改查的按鈕。 表的結(jié)構(gòu) SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;
推薦度:
導(dǎo)讀vue權(quán)限管理系統(tǒng)的實(shí)現(xiàn)代碼:后臺(tái)管理系統(tǒng)一般都會(huì)有權(quán)限模塊,用來(lái)控制用戶能訪問(wèn)哪些頁(yè)面和哪些數(shù)據(jù)接口。大多數(shù)管理系統(tǒng)的頁(yè)面都長(zhǎng)這樣。 左邊為菜單,分為兩級(jí),右邊為圖表顯示區(qū)域,有增刪改查的按鈕。 表的結(jié)構(gòu) SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;

后臺(tái)管理系統(tǒng)一般都會(huì)有權(quán)限模塊,用來(lái)控制用戶能訪問(wèn)哪些頁(yè)面和哪些數(shù)據(jù)接口。大多數(shù)管理系統(tǒng)的頁(yè)面都長(zhǎng)這樣。

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

表的結(jié)構(gòu)

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 '權(quán)限Id',
 `pauth_id` varchar(128) DEFAULT NULL COMMENT '父級(jí)Id',
 `auth_name` varchar(255) NOT NULL COMMENT '權(quán)限名稱',
 `auth_icon` varchar(255) NOT NULL COMMENT '權(quán)限圖標(biāo)',
 `auth_type` smallint(6) NOT NULL COMMENT '權(quán)限類型,BIT表示其屬性\r\n 0x00表示可顯示的菜單權(quán)限節(jié)點(diǎn);\r\n 0x01表示普通節(jié)點(diǎn)',
 `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 '權(quán)重',
 `rule` varchar(256) DEFAULT NULL COMMENT '規(guī)則路徑主要對(duì)應(yīng)菜單或方法的路徑名稱',
 `cr_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
 `up_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新時(shí)間',
 PRIMARY KEY (`id_pk`),
 UNIQUE KEY `AK_auth_id` (`auth_id`)
) ENGINE=InnoDB AUTO_INCREMENT=264 DEFAULT CHARSET=utf8 COMMENT='權(quán)限規(guī)則表,記錄權(quán)限相關(guān)的信息,權(quán)限以父子關(guān)系存在,菜單是權(quán)限的一種。';

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 '權(quán)限id',
 `aa` varchar(255) DEFAULT NULL,
 PRIMARY KEY (`id_pk`)
) ENGINE=InnoDB AUTO_INCREMENT=77 DEFAULT CHARSET=utf8 COMMENT='角色與權(quán)限的關(guān)系表';

SET FOREIGN_KEY_CHECKS = 1;

對(duì)于菜單的權(quán)限,通過(guò)路由表匹配

addRouters(menuMap) {
 let routerArr = [];
 for (let j = 0; j < routerList.length; j++) {
 let obj;
 if (menuMap['AuthRule::' + routerList[j].path]) { // 找到一級(jí)菜單
 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]) { // 找到二級(jí)菜單
 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為登錄時(shí)獲取的權(quán)限菜單,是一個(gè)對(duì)象; routerList為前端定義的路由表;遍歷routerList,如果routerList的key在menuMap里能找到的話,就表示該路由存在。最后生成一個(gè)過(guò)濾后的路由表,用vue提供的addRoutes方法動(dòng)態(tài)添加到路由中,并把過(guò)濾后的路由表存到本地。

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

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

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

對(duì)于按鈕的權(quán)限

if (res.data.auth_rule_map) {
 let obj = {}
 Object.keys(res.data.auth_rule_map).forEach(i => {
 // 將所有的按鈕放到一個(gè)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為接口返回權(quán)限map,把按鈕的權(quán)限過(guò)濾出來(lái)存到本地。

將map添加到每個(gè)路由組件的data里,(這里有一個(gè)問(wèn)題,怎么判斷一個(gè)組件是否是路由組件),目前想到的是通過(guò)組件name來(lái)判斷,把所有的路由組件放到一個(gè)數(shù)組里做判斷。

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

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

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]">添加會(huì)員</Button>

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

vue權(quán)限管理系統(tǒng)的實(shí)現(xiàn)代碼

vue權(quán)限管理系統(tǒng)的實(shí)現(xiàn)代碼:后臺(tái)管理系統(tǒng)一般都會(huì)有權(quán)限模塊,用來(lái)控制用戶能訪問(wèn)哪些頁(yè)面和哪些數(shù)據(jù)接口。大多數(shù)管理系統(tǒng)的頁(yè)面都長(zhǎng)這樣。 左邊為菜單,分為兩級(jí),右邊為圖表顯示區(qū)域,有增刪改查的按鈕。 表的結(jié)構(gòu) SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS = 0;
推薦度:
標(biāo)簽: VUE 權(quán)限 管理
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top