vue权限管理系统的实现代码

  

后台管理系统一般都会有权限模块,用来控制用户能访问哪些页面和哪些数据接口。大多数管理系统的页面都长这样。

  

 vue权限管理系统的实现代码

  

左边为菜单,分为两级,右边为图表显示区域,有增删改查的按钮。

  

表的结构

        设置名字utf8mb4;   设置FOREIGN_KEY_CHECKS=0;      -- ----------------------------   ——为t_auth_rule表结构   -- ----------------------------   删除表如果存在“t_auth_rule”;   创建表“t_auth_rule”(   id_pk的bigint (20) NOT NULL AUTO_INCREMENT,   ‘auth_id varchar (128) NOT NULL评论“权限Id”,   pauth_id的varchar(128)默认空评论的父级Id”,   ‘auth_name varchar (255) NOT NULL评论“权限名称”,   “auth_icon”varchar (255) NOT NULL评论“权限图标”,   auth_type的短整型(6)NOT NULL评论“权限类型,有些表示其属性\ r \ n 0 x00表示可显示的菜单权限节点。\ r \ n 0 x01表示普通节点”,   auth_condition文本评论的条件,   “备注”varchar(255)默认空评论“备注”,   is_menu的短整型(255)默认“0”评论“是否为菜单,0表示非,1表示是”,   “体重”int (11) NOT NULL默认“0”评论“权重”,   “规则”varchar(256)默认空评论“规则路径主要对应菜单或方法的路径名称”,   “cr_time”默认时间戳NOT NULL CURRENT_TIMESTAMP评论“创建时间”,   “up_time”默认时间戳NOT NULL CURRENT_TIMESTAMP>   addRouters (menuMap) {   让routerArr=[];   (让j=0;j & lt;routerList.length;j + +) {   让obj;   如果(menuMap [' AuthRule:: ' + routerList [j] .path)){//找到一级菜单   obj={   路径:routerList [j] .path,   组件:routerList [j] .component,   重定向:routerList [j] .redirect,   名称:routerList [j] . name,   元:routerList [j] .meta,   孩子们:[]   };      如果(routerList [j] .children.length) {   (让k=0;k & lt;routerList [j] .children.length;k + +) {   让_fullpath=routerList [j]定格[k] .path   如果(routerList [j]定格[k] .meta) {   _fullpath=routerList [j]定格[k] .meta。parentPath +‘/? _fullpath   }   如果(menuMap [' AuthRule:: ' + _fullpath]){//找到二级菜单   obj.children.push (routerList [j]定格[k]);   }   }   }   }   如果(obj) {   routerArr.push (obj);   美元。router.options.routes.push (obj);   }   }      存储。集(“routerArr routerArr);   美元。router.addRoutes (routerArr);   美元。路由器。推动({路径:"});   },      

menuMap为登录时获取的权限菜单,是一个对象,routerList为前端定义的路由表;遍历routerList,如果routerList的关键在menuMap里能找到的话,就表示该路由存在。最后生成一个过滤后的路由表,用vue提供的addRoutes方法动态添加到路由中,并把过滤后的路由表存到本地。

        const menuMap={   “/仪表盘”:{路径:/仪表盘,名字:“首页”}   }   const routerList=[   {路径:/仪表盘,名字:“首页”,组件:. .}   )      

在页面刷新的时候,从本地获取路由表,添加到路由表中,代码如下,constRouterArr为基础路由表,比如登录,404等

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

对于按钮的权限

        如果(res.data.auth_rule_map) {   让obj={}   种(res.data.auth_rule_map)。forEach (i=比;{//将所有的按钮放到一个obj里主要为接口地址   如果(res.data.auth_rule_map[我]。is_menu===0){//如果是按钮   obj [res.data.auth_rule_map[我].rule]=1   }   })   存储。集(“btnList obj);   存储。集(“menuTree res.data.auth_rule_map);   }      

auth_rule_map为接口返回权限地图,把按钮的权限过滤出来存到本地。
  

  

将地图添加到每个路由组件的数据里,(这里有一个问题,怎么判断一个组件是否是路由组件),目前想到的是通过组件的名字来判断,把所有的路由组件放到一个数组里做判断。

  

在组件内部的按钮上加上v,如果。uri__里的uri在uriMap里存在就显示。
  

  

也可以通过方法来判断,如下面的__isBtnShow,不仅可以控制按钮的显示隐藏,还可以控制其样式,比如颜色等,更加灵活,推荐使用方法来控制

vue权限管理系统的实现代码