当前位置: 首页 > article >正文

vue3+element-plus角色权限管理分配

这里的图片是截图这个老师的项目
为了方便大家使用,我会在每个图片下面将代码原封不动打一遍

在src/uitls/permission.js加入以下内容

本段代码讲解:
参数一:后台传来的路由
参数二:前端所有的路由
先遍历前端所有路由,在里面继续遍历后台路由,通过二者某一个关键字的是否相同判断用户是否有权限(这里老师使用的是title关键字),关键字相同理论是可以直接追加了,但是考虑到二级或者三级子内容存在,这里老师做了个递归处理,就是如果当前元素有children属性就给当前元素children属性来个递归处理,最终返回的值就是当前权限所能访问的值

在这里插入图片描述
以下内容和上面图片一致,方便拷贝使用

/**
* 参数1:后台传来的关键字数组,参数二:全部路由数据
*/
export function comparation(userRouter=[],allRouter=[]){
  let realRouter = []
  allRouter.forEach(item=>{
    userRouter.forEach(v=>{
      if(item.meta,title===v.title){
        //注意children
        if(item.children && item.children.length>0){
          item.children=comparation(v.children,item.children)
        }
        realRouter.push(item)
      }
    })
  })
  return realRouter
}

这个代码是在vuex里面写的,基本都有注释

代码解释: 这段代码老师定义了路由集合数据,是真正的需要展现到页面的数据(这里老师还用了个导航菜单,本人没用到,直接通过路由生成的菜单,后台传过来的数据或者前台定义的路由表每个人都不一样,这个主要是理解这个权限管理思路),中间的mutation定义了路由表和菜单的设置与消失,在action里面的方法才是真正的核心,里面发送了当前用户的角色的请求,然后引入刚刚上面模块定义的方法给用户设置权限,最后添加到vuex和路由中

在这里插入图片描述
在这里插入图片描述
以上两张图片是连在一起的
以下内容和上面两张图片一致,方便拷贝使用

import { comparsion } from "@/uitl/comparsion";
export default {
  namespaced: true,
  state: {
    routerList: null, //真正的路由
    sideBar: [], //导航菜单
  },
  mutations: {
    set_routerList(state, data) {
      state.realRouter = data;
    },
    clear_routerList(state, data) {
      state.realRouter = null;
    },
    set_sideBar(state, data) {
      state.sideBar = data;
    },
    clear_sideBar(state, data) {
      state.sideBar = [];
    },
  },
  actions: {
    async gat_routers({ commit }, data) {
      //获取比对路由
      let routers = await login("/login", { username: "admin" }).then((res) => {
        return res.data.router;
      });
      //导航菜单
      commit("set_sideBar", routers[0].children);
      // 比对路由(参数一是上面后台返回的关键字数组,参数二是所有路由,需要导入)
      let realRouter = comparation(routers, allRouter);
      console.log(realRouter);
      // 存储到vuex
      commit("set_routerList", realRouter);
      // 动态添加路由
      router.addRoutes(realRouter); //这是vue2写法,vue3版本的router4版本没有addRoutes,只有addRoute
      //以下是我本人的写法(vue-router4版本只能通过循环一个一个加)
      // realRouter.forEach((item) => {
      //   router.addRoute(item);
      // });
    },
  },
};

这里老师做了前置守卫

代码说明:
在每次路由跳转都去获取一次角色身份(这点个人不太建议,其一:每次路由更改都要获取请求和添加路由表等,感觉麻烦,本人在路由父级(第一层路由)那里设置onMonend生命周期去调用的)

在这里插入图片描述
以下内容和上面图片一致,方便拷贝使用

router.beforeEach((to, from, next) => {
 if(!getToken()){ //没有登录
  if(to.meta.token){//需要登录
    next({
      path:"/login"
    })
  }else{
    next()
  }
 }else{ //登录
    //判断权限
    if(!store.state.permission.routerList){//没有路由
      //获取路由
      store.dispatch('permission/gat_routers').then(()=>{
        console.log(1000);
        next()
      })
    }
 }
})

这里附上老师的视频教程,只需要看我链接这个后半部分视频就够了,前面没啥用,后半部分是核心


http://www.kler.cn/news/16241.html

相关文章:

  • 使用cube studio开发机器学习建模的pipeline
  • Java面试题字节流字符流
  • python-使用Qchart总结3-绘制曲线图
  • 马斯克们叫停 GPT-5,更像是场行为艺术
  • 【SpringBoot 应用打包与部署】
  • 为什么越来越多的企业选择云计算
  • 《Netty》从零开始学netty源码(四十六)之PooledByteBuf
  • 不能使用chatGPT?这3个平替甚至比chatGPT更强
  • 万字长文 - Nature 综述系列 - 给生物学家的机器学习指南 2 (传统机器学习方法如何选择)...
  • 《孙子兵法》中关于领导力的一个不错的描述
  • 创建NAT模式KVM虚拟机
  • spring常用的事务传播行为
  • CSS(二)-- 选择器的运用(针对基本选择器和复合选择器的详细解析)
  • 一文了解使用Moonbeam原生跨链的潜力项目
  • 【Java笔试强训 27】
  • 【Leetcode -86.分隔链表 -92.反转链表Ⅱ】
  • LeetCode_字符串_简单_415.字符串相加
  • 终于把 vue-router 运行原理讲明白了(二)!!!
  • 票务app开发案例分享
  • 【JAVA】#详细介绍!!! 文件操作之File对象(1)!
  • 从信息泄露到权限后台
  • Java面试题队列
  • Pandoc 从入门到精通,你也可以学会这一个文本转换利器
  • 2的幂次方
  • 微软开源AI修图工具让老照片重现生机
  • Java版本电子招标采购系统源代码—企业战略布局下的采购寻源
  • 网络安全漏洞分析之远程代码执行
  • 长/短 链接/轮询 和websocket
  • python深度强化学习模型的原理、应用!
  • Java 中的包是什么?如何创建和使用包?(八)