vue權(quán)限管理系統(tǒng)的實(shí)現(xiàn)代碼
后臺(tái)管理系統(tǒng)一般都會(huì)有權(quán)限模塊,用來(lái)控制用戶(hù)能訪問(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)限名稱(chēng)', `auth_icon` varchar(255) NOT NULL COMMENT '權(quán)限圖標(biāo)', `auth_type` smallint(6) NOT NULL COMMENT '權(quán)限類(lèi)型,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)菜單或方法的路徑名稱(chē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里能找到的話(huà),就表示該路由存在。最后生成一個(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>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vue中實(shí)現(xiàn)權(quán)限管理詳解
- vue登錄路由權(quán)限管理的項(xiàng)目實(shí)踐
- vue實(shí)現(xiàn)前端按鈕組件權(quán)限管理
- Vue?element實(shí)現(xiàn)權(quán)限管理業(yè)務(wù)流程詳解
- 深入解析vue中的權(quán)限管理
- vue?router權(quán)限管理實(shí)現(xiàn)不同角色顯示不同路由
- 淺談vue權(quán)限管理實(shí)現(xiàn)及流程
- Vue 指令實(shí)現(xiàn)按鈕級(jí)別權(quán)限管理功能
- 關(guān)于Vue的路由權(quán)限管理的示例代碼
- vue 權(quán)限管理幾種實(shí)現(xiàn)方法
相關(guān)文章
vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能示例詳解
這篇文章主要介紹了vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09
淺析vue cli3 封裝Svgicon組件正確姿勢(shì)(推薦)
這篇文章主要介紹了vue cli3 封裝Svgicon組件正確姿勢(shì),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04
three.js實(shí)現(xiàn)vr全景圖功能實(shí)例(vue)
去年全景圖在微博上很是火爆了一陣,正好我也做過(guò)一點(diǎn)全景相關(guān)的項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于three.js實(shí)現(xiàn)vr全景圖功能的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-05-05
vue+vant-UI框架實(shí)現(xiàn)購(gòu)物車(chē)的復(fù)選框全選和反選功能
這篇文章主要介紹了vue+vant-UI框架實(shí)現(xiàn)購(gòu)物車(chē)的復(fù)選框全選和反選功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11
vue2使用el-tag實(shí)現(xiàn)自定義菜單導(dǎo)航標(biāo)簽
這篇文章主要為大家詳細(xì)介紹了vue2如何使用el-tag實(shí)現(xiàn)自定義菜單導(dǎo)航標(biāo)簽,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12
vue頁(yè)面加載時(shí)的進(jìn)度條功能(實(shí)例代碼)
這篇文章主要介紹了vue頁(yè)面加載時(shí)的進(jìn)度條功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
vue3 element-plus如何使用icon圖標(biāo)組件
這篇文章主要介紹了vue3 element-plus如何使用icon圖標(biāo)組件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
elementUI動(dòng)態(tài)嵌套el-form表單校驗(yàn)舉例詳解
最近工作遇到個(gè)需求,表單可以進(jìn)行增加刪除操作,需要進(jìn)行表單校驗(yàn),這篇文章主要給大家介紹了關(guān)于elementUI動(dòng)態(tài)嵌套el-form表單校驗(yàn)的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-06-06

