最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2019年01月17日 11:00:30   作者:韋磊  
這篇文章主要介紹了vue權(quán)限管理系統(tǒng)的實(shí)現(xiàn)代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

左邊為菜單,分為兩級,右邊為圖表顯示區(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 '父級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ī)則路徑主要對應(yīng)菜單或方法的路徑名稱',
 `cr_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時間',
 `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='權(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;

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

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

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

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

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

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

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為接口返回權(quán)限map,把按鈕的權(quán)限過濾出來存到本地。

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

在組件內(nèi)部的按鈕上加上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>

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能示例詳解

    vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能示例詳解

    這篇文章主要介紹了vue+element實(shí)現(xiàn)下拉菜單并帶本地搜索功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • 淺析vue cli3 封裝Svgicon組件正確姿勢(推薦)

    淺析vue cli3 封裝Svgicon組件正確姿勢(推薦)

    這篇文章主要介紹了vue cli3 封裝Svgicon組件正確姿勢,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • three.js實(shí)現(xiàn)vr全景圖功能實(shí)例(vue)

    three.js實(shí)現(xiàn)vr全景圖功能實(shí)例(vue)

    去年全景圖在微博上很是火爆了一陣,正好我也做過一點(diǎn)全景相關(guān)的項(xiàng)目,下面這篇文章主要給大家介紹了關(guān)于three.js實(shí)現(xiàn)vr全景圖功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-05-05
  • vue+vant-UI框架實(shí)現(xiàn)購物車的復(fù)選框全選和反選功能

    vue+vant-UI框架實(shí)現(xiàn)購物車的復(fù)選框全選和反選功能

    這篇文章主要介紹了vue+vant-UI框架實(shí)現(xiàn)購物車的復(fù)選框全選和反選功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • vue實(shí)現(xiàn)換膚功能

    vue實(shí)現(xiàn)換膚功能

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)換膚功能,一套深色,一套淺色,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • vue2使用el-tag實(shí)現(xiàn)自定義菜單導(dǎo)航標(biāo)簽

    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頁面加載時的進(jìn)度條功能(實(shí)例代碼)

    vue頁面加載時的進(jìn)度條功能(實(shí)例代碼)

    這篇文章主要介紹了vue頁面加載時的進(jìn)度條功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-01-01
  • Vue自定義鈴聲提示音組件的實(shí)現(xiàn)

    Vue自定義鈴聲提示音組件的實(shí)現(xiàn)

    這篇文章主要介紹了Vue中自定義一個鈴聲提示音組件的實(shí)現(xiàn)以及使用方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Vue有一定幫助,需要的可以參考一下
    2022-01-01
  • vue3 element-plus如何使用icon圖標(biāo)組件

    vue3 element-plus如何使用icon圖標(biāo)組件

    這篇文章主要介紹了vue3 element-plus如何使用icon圖標(biāo)組件問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • elementUI動態(tài)嵌套el-form表單校驗(yàn)舉例詳解

    elementUI動態(tài)嵌套el-form表單校驗(yàn)舉例詳解

    最近工作遇到個需求,表單可以進(jìn)行增加刪除操作,需要進(jìn)行表單校驗(yàn),這篇文章主要給大家介紹了關(guān)于elementUI動態(tài)嵌套el-form表單校驗(yàn)的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06

最新評論

鄱阳县| 锦州市| 深圳市| 河间市| 朝阳区| 兴海县| 高陵县| 遵义县| 平山县| 仁布县| 许昌市| 泉州市| 宜章县| 佛教| 鄢陵县| 仁布县| 资溪县| 建德市| 冷水江市| 共和县| 迁安市| 鹤岗市| 南安市| 双峰县| 施甸县| 肃南| 葵青区| 柳河县| 龙江县| 通州市| 涟水县| 图们市| 保德县| 肃宁县| 喀喇| 九龙城区| 尚义县| 兴海县| 株洲县| 抚州市| 永吉县|