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

news2025/2/27 5:55:13

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

在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.coloradmin.cn/o/482596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

入门大纲 我为什么使用delta-io 数据湖 替代hive

1 大厂背书 databricks宣布把delta-io共享给apache基金会 并且delta-io从以前打杂的0.x版本升级为1.x 随后就是bug的各种修复和新功能的增加. release note可以看: Releases delta-io/delta GitHub 2 并发控制(解决了多任务并发读写表时的 读写冲突) hive/spark 如果多个任…

Android DownloadManager 下载安装App功能实现

@[DownlaodManager 实战] 升级功能是APP必备功能,本文以下载安装APP的完整流程来说明DownlaodManager的基本使用方法。 前提准备 下载需要互联网权限,需要申请<uses-permission android:name="android.permission.INTERNET" />权限; 安装APP,需要申请<…

【微机原理】8088/8086CPU引脚

8086是16位微处理器数据线有16根&#xff1b;8088是准16位微处理器&#xff0c;它对外的数据线是8位的。他们的地址线都是20位的&#xff0c;8088/8086均为40条引线、双列直插式封装 地址线决定了访问主存的容量&#xff0c;数据线决定了CPU的运输能力 为了能在有限的40条引线范…

【C语言】十大经典排序代码及GIF演示

&#x1f525;&#x1f525;&#x1f525;专栏推荐&#xff1a;C语言基础语法&#x1f525;&#x1f525;&#x1f525; 十大经典排序代码 1. 冒泡排序2. 选择排序3. 插入排序4. 快速排序5. 归并排序6. 堆排序7. 希尔排序8. 计数排序9. 桶排序10. 基数排序 1. 冒泡排序 通过依次…

MQ 服务占用 CPU 太高

文章目录 MQ 服务占用 CPU 太高1. 出现问题2. 分析过程1. 通过日志定位问题服务2. 查询异常服务进程、CPU、内存、IO、锁和网络3. CPU 占用过高分析 3. 解决方案 MQ 服务占用 CPU 太高 1. 出现问题 测试环境中&#xff0c;匹配业务运行时会出现响应缓慢或超时失败的情况 2. …

继承的相关介绍---C++

一、概念及定义 概念&#xff1a; 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象程序设计的层次结…

复现CVE-2023-21839

攻击机安装jdk1.8 下载jdk1.8 https://www.azul.com/downloads/?versionjava-8-lts&osubuntu&architecturex86-64-bit&packagejdk#zulu 或 wget https://cdn.azul.com/zulu/bin/zulu8.60.0.21-ca-jdk8.0.372-linux_x64.tar.gz tar -zxvf zulu8.60.0.21-ca-jdk8.…

GB/T 28181-2011、2016、2022变更对比

一、GB/T 28181-2016与GB/T 28181-2011变更对比 GB/T 28181-2016与GB/T 28181-2011相比&#xff0c; 除编辑性修改外主要技术变化如下&#xff1a; ----(1) 修改了标准名称&#xff1b; ----(2) 增加了媒体流TCP传输要求(见4.3.1&#xff0c; 5.2&#xff0c;附录F&#xff…

Ubuntu磁盘和目录和文件的相关操作

目录 1、目录的切换 2、查看目录及文件 3、目录的常见操作 4、文件的常见操作 5、查看文件及目录大小 6、命令查看硬盘信息 1、目录的切换 打开终端窗口&#xff08;”ctrlaltt“&#xff09; 一般使用&#xff08;”pwd“&#xff09;显示当前所在的目录 比如&#x…

【用python的QT做信号处理的界面】

文章目录 入口文件界面参数调整数据从dat解析出来的文件从界面点击打开文件夹的功能实现主要功能代码网络参数存图替换功能&#xff0c;比如把倒频谱替换成倒频谱2 入口文件 入口文件&#xff0c;主要用来实例化窗口&#xff08;不重要&#xff09;&#xff0c;只要知道从这里…

电脑中病毒了怎么修复,计算机Windows系统预防faust勒索病毒方法

随着计算机系统的不断发展&#xff0c;我们所面对的网络安全威胁也变得越来越严重。其中&#xff0c;较为常见且危险的威胁就是勒索病毒。随着勒索病毒加密算法的不断升级&#xff0c;最近faust勒索病毒开始流行。Faust勒索病毒主要的攻击目标是Windows操作系统&#xff0c;一旦…

SpringBoot手册

目录 依赖管理关于各种的 start 依赖关于自动配置关于约定大于配置中的配置SpringBoot 整合 SpringMVC定制化 SpringMVC静态资源处理对上传文件的处理对异常的处理Web原生组件注入&#xff08;Servlet、Filter、Listener&#xff09;Interceptor 自定义拦截器DispatcherServlet…

【iOS】GCD学习

GCD的概念 GCD&#xff08;Grand Central Dispatch&#xff09;&#xff0c;是有Apple公司开发的一个多核编程的解决方案&#xff0c;用以优化应用程序支持多核处理器&#xff0c;是基于线程模式之上执行并发任务。 GCD的优点 利用设备多核进行并行运算GCD自动充分使用设备的…

C语言-学习之路-03

C语言-学习之路-03 程序流程结构选择结构if语句if...else...语句三目运算符switch语句 循环结构while语句do...while语句for语句嵌套循环 跳转语句break、continue、gotobreak语句continue语句goto语句 程序流程结构 C语言支持最基本的三种程序流程结构&#xff1a;顺序结构、…

三、SpringMVC

三、SpringMVC 1、SpringMVC简介 1.1、什么是MVC MVC是一种软件架构的思想&#xff0c;将软件按照模型、视图、控制器来划分 M&#xff1a;Model&#xff0c;模型层&#xff0c;指工程中的JavaBean&#xff0c;作用是处理数据 JavaBean分为两类&#xff1a; 一类称为实体…

REST API 详解

REST API REST&#xff08;Representational State Transfer&#xff0c;表述性状态转移&#xff09;是一种用于构建分布式系统的架构风格。REST API&#xff08;Application Programming Interface&#xff0c;应用程序接口&#xff09;是一种基于REST风格的网络API&#xff…

Filter 过滤器

Filter过滤器介绍 这里我们讲解Filter的执行流程&#xff0c;从下图可以大致了解到&#xff0c;当客户端发送请求的时候&#xff0c;会经过过滤器&#xff0c;然后才能到我们的servlet&#xff0c;当我们的servlet处理完请求之后&#xff0c;我们的response还是先经过过滤器才…

Packet Tracer - 配置交换机端口安全

Packet Tracer - 配置交换机端口安全 地址分配表 设备 接口 IP 地址 子网掩码 S1 VLAN 1 10.10.10.2 255.255.255.0 PC1 NIC 10.10.10.10 255.255.255.0 PC2 NIC 10.10.10.11 255.255.255.0 非法笔记本电脑 NIC 10.10.10.12 255.255.255.0 目标 第 1 部…

MySQL监控告警及可视化:Zabbix+Percona PMP实现(Part I)

MySQL监控告警及可视化&#xff1a;ZabbixPercona PMP实现&#xff08;Part I&#xff09; 准备工作Zabbix Server安装Zabbix Server配置conf文件配置系统服务配置Web服务配置 Zabbix Agent安装Zabbix Agent配置conf文件配置系统服务配置 准备工作 &#x1f42c;软件下载&#…

ChatGPT提示词工程(五):Transforming转换

目录 一、说明二、安装环境三、转换&#xff08;Transforming&#xff09;1. 翻译 Translation2. 语气转换 Tone Transformation3. 格式转换 Format Conversion4. 拼写或语法检查 Spellcheck/Grammar check 一、说明 这是吴恩达 《ChatGPT Prompt Engineering for Developers》…