vue3用户权限管理(路由控制等)

在前端开发的过程中,我们需要做前端的权限管理,我们需要根据后端提供的信息来控制权限,这时候就需要根据用户的操作来进行权限控制了。逻辑稍微有一点绕,多理解就好了。

用户路由权限管理

        大致的实现原理:

                一般将路由分为2种,一种是静态路由,就是所有的账号都可以访问的路由,比如登录,比如主页等,还有一种是动态路由,就是我们需要做权限判断的路由。实现逻辑是,当我们登录完成后,获取到token,用token去接口请求,获取权限路由信息,在将路由信息存储到vuex中,然后在路由前置守卫里判断,去筛选,那我们在vuex中存储的权限信息去匹配我们拆分的动态路由,然后将整合的路由通过router.addroute将动态路由添加到前端路由里面,这样就实现了前端路由权限管控。

1,新建组件

        我们建3个租价,一个主页组件,一个登录组件,还有一个404页面,其中登录组件是我们的静态组件,代表着所有用户都有权限访问

2,拆分动态路由

        在路由配置文件里,新建一个文件,在里面放我们的动态路由。

        

         在组件中把我们的动态组件放进去(主页组件,404组件)

        后面我会讲为什么也要把404组件放在动态组件里面去。

export default [{ path: "/",  //主页组件name: "home",component: () => import("@/views/HomeView.vue"),},{path: "*", //404组件name: "notfound",component: () => import("@/views/NotFound.vue"),},
];

3,创建静态组件

        静态组件就是每个账号都有的权限,正常在router文件夹下的index里写即可。

 4.通过vuex来存储后端返回的权限信息

        如何下载vuex我就不过多的说了,在vuex的state里建一个role来存储数据,然后在actions里请求权限接口,将接口返回的权限数据存放在role里,代码如下

import { createStore } from 'vuex'export default createStore({state: {role:""},getters: {},mutations: {setrole(state,data){state.role = data}},actions: {async getrole({commit}){const role = ["/","*"]  //这一步是请求接口,接口返回一个权限数组,这里我用一个变量代替commit("setrole",role)  //将权限数组通过mutations修改state里的role数据}},modules: {}
})

5.路由里使用路由前置导航,将vuex里的数据添加入动态路由里面

        

import { createRouter, createWebHashHistory, RouteRecordRaw } from 'vue-router'
import Login from '../views/LoginIndex.vue' 
import asyncrouter from "./trends"  //1.导入动态路由
import store from '@/store' //2.导入vuex配置
const routes: Array<RouteRecordRaw> = [{path: '/login',name: 'login',component: Login},
]const router = createRouter({history: createWebHashHistory(),routes
})router.beforeEach(async(to,from,next)=>{//这里写简单的登录判断逻辑,我就不细写了if(1){  //3.判断token存在await store.dispatch("getrole")  //4。调用vuex的方法,在vuex里请求接口获取权限列表if(to.path=="/login"){//5.有token的情况下,如果走登录路由,给重定向到/路由next("/")}else{ //6.如果他不走登录,我们就判断他是不是走其他不存在的路由if(to.path == null){ //7.这里通过to.path是否为空来确定他是不是走的不存在的路由let  f=asyncrouter.filter(item=>item.path.includes(store.state.role)) //9。判断走的是不存在的路由,这里直接调取vuex的role和我们定义的动态路由做筛选//把在动态路由中符合我们 ["/","*"] 的给筛选出来for(let i=0;i<f.length;i++){  //10,通过循环,给动态路由给添加进去router.addRoute(f[i])}next({...to,replace:true})  //11.这里是为了预防,我跳转路由在添加路由之前,就让他一直重复跳,知道正确的进去到我们天啊及的动态路由}else{next()}}}else{if(to.path=="/login"){next()}else{next("/login")}}
})export default router

代码里关键的地方都有注释,应该能看懂

这里我解释下:以为vuex和router.addroute都有一个特性,就是刷新会丢失,所以我们要把他放在路由前置守卫里,他丢失不怕,我们在每次跳转路由前都重新请求一遍,在把他给获取下来。

第二就是,为什么要把404也放到动态路由里面,这里是因为,我们在上面的逻辑中,当访问一个不存在的路由的时候,我们就通过动态路由方法来添加路由。如果,我们把404放在一静态路由里面的话,就会出现一个问题,当我们访问一个不存在的路由的时候,就被404路由给捕获了,就不会走我们的动态添加路由了。

稍微有一点绕,多看下理解就好了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/605929.shtml

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

相关文章

适配器Adapters

1.适配器作用 主要是对底层的东西进行改造 2.适配器种类&#xff1a;容器适配器&#xff0c;迭代器适配器&#xff0c;仿函数适配器 2.1容器适配器&#xff1a; stack&#xff0c;queue他们两的底层结构都为deque&#xff0c;deque有好多功能&#xff0c;而stack&#x…

云卷云舒:【实战篇】Sql Server迁移

1. 简介 部分SQL Server数据库的数据量比较大&#xff0c;无法在业务割接期间完成SQL Server全量数据的迁移&#xff0c;这种场景下&#xff0c;可采用全量增量的方式进行数据迁移。 2. 迁移原理 SQL Server alwayson 1.任何一个SQL Server里都有个叫Log Writer的线程&…

CentOS 7 系列默认的网卡接口名称

CentOS 7 系列默认的网卡接口是随机的&#xff0c;如果要修改网卡名称以 eth 开头&#xff0c;有两种方式。 方法一&#xff1a;安装系统时 在安装界面移动光标到 Install Centos 7.按 TAB 键 在出现的代码的末尾添加&#xff1a;net.ifnames0 biosdevname0.按下回车开始安装即…

mybatis 增删改查

MyBatis 是一种持久化框架&#xff0c;主要用于简化数据库访问代码的编写。它允许开发者使用 XML 或注解来配置 SQL 映射&#xff0c;并提供了自动将数据库操作映射到 Java 对象的功能。以下是 MyBatis 中的基本增删改查操作的示例&#xff1a; 1. 增加&#xff08;Insert&…

微信管理大杀器:这个让工作高效不费力的利器你值得拥有!

在如今互联网社交时代&#xff0c;微信已经成为了人们生活中不可或缺的一部分。无论是与朋友聊天、分享生活&#xff0c;还是与客户进行商务洽谈&#xff0c;微信都扮演着重要的角色。对于个人而言&#xff0c;拥有一个高效管理微信私域的工具&#xff0c;将极大地提升运营效率…

可在图像中生成任意精准文本,支持中文!阿里开源AnyText

随着Midjourney、Stable Difusion等产品的出现&#xff0c;文生图像领域获得了巨大突破。但是想在图像中生成/嵌入精准的文本却比较困难。 经常会出现模糊、莫名其妙或错误的文本&#xff0c;尤其是对中文支持非常差&#xff0c;例如&#xff0c;生成一张印有“2024龙年吉祥”…

Arrays 数组工具类常用方法

java.util.Arrays类即为操作数组的工具类&#xff0c;包含了用来操作数组&#xff08;比如排序和搜索&#xff09;的各种方法 equals&#xff1a;比较两个数组是否相等 int[] arr1 new int[]{1,2,3}; int[] arr2 new int[]{1,2,3}; boolean equals Arrays.equals(arr1, ar…

Java学习苦旅(二十七)——Java中的集合框架

本篇博客将初略讲解Java中的集合框架及背后的数据结构。 集合框架介绍 Java 集合框架 Java Collection Framework&#xff0c;又被称为容器 &#xff08;container&#xff09;&#xff0c;是定义在java.util包下的一组接口 interfaces 和其实现类 classes 。其主要表现为将多…

【Linux】宝塔端口不通

1.问题描述&#xff1a;端口不通 以端口16588为例&#xff1a; 服务器16588端口是关闭的&#xff0c;防火墙规则是放通的&#xff0c;是由于服务器内的对应程序没有监听到 对应 的公网上 图1&#xff1a;端口检测 图2&#xff1a; 端口已放行 此时访问仍然不通&#xff0c;但…

基于SpringBoot的考务报名平台的设计与实现,java

文章目录 项目介绍主要功能截图:部分代码展示设计总结项目获取方式🍅 作者主页:超级无敌暴龙战士塔塔开 🍅 简介:Java领域优质创作者🏆、 简历模板、学习资料、面试题库【关注我,都给你】 🍅文末获取源码联系🍅 项目介绍 基于SpringBoot的考务报名平台的设计与实…

EM算法求解男女升高-Python

EM算法求解男女升高-Python 目前关于EM算法理论分析很全了&#xff0c;代码还比较少&#xff0c;一般就停留在最后的似然函数。 问题 现在一个班里有100个男生和女生。我们假定男生的身高服从正态分布&#xff0c;女生的身高则服从另一个正态分布。 求解两个正态分布的参数。…

Vue-6、Vue事件处理

1、点击事件 <!DOCTYPE html> <html lang"en" xmlns:v-model"http://www.w3.org/1999/xhtml" xmlns:v-bind"http://www.w3.org/1999/xhtml"xmlns:v-on"http://www.w3.org/1999/xhtml"> <head><meta charset&quo…

详细介绍如何微调 T5 Transformer 模型:用于构建 Stack Overflow 标签生成器的 Text2Text 传输转换器-含源码

在不断发展的自然语言处理 (NLP) 领域,T5(文本到文本传输转换器)模型已成为一种多功能模型。针对特定任务对该模型进行微调可以释放其全部潜力,使其成为人工智能爱好者和专业人士的一项关键技能。本文深入研究了T5 Transformer 模型的微调,特别是针对基于 Stack Overflow …

ip协议历史

今天的互联网&#xff0c;是万维网&#xff08;WWW&#xff09;一家独大。而在上世纪七八十年代&#xff0c;人们刚开始尝试网络连接时&#xff0c;那时出现了计算机科学研究网络、ALOHA 网、因时网、阿帕网等不同类型的网络&#xff0c;这些网络之间互相通信是个难题。 于是&…

openssl3.2 - 编译

文章目录 openssl3.2 - 编译概述OpenSSL源码下载编译目标如何编译前置环境 - perl前置环境 - VS前置环境 - NASM快速编译步骤编译 - Quick startInstall PerlInstall NASMUse Visual Studio Developer Command Prompt with administrative privilegesFrom the root of the Open…

SV-7042T 15W网络有源音箱 商场广播音箱 酒店广播音箱

SV-7042T 15W网络有源音箱 商场广播音箱 酒店广播音箱 一、描述 SV-7042T是深圳锐科达电子有限公司的一款壁挂式网络有源音箱&#xff0c;具有10/100M以太网接口&#xff0c;可将网络音源通过自带的功放和喇叭输出播放&#xff0c;可达到功率15W。同时它可以外接一个15W的无源…

【已解决】Pytorch RuntimeError: expected scalar type Double but found Float

本文作者&#xff1a; slience_me 文章目录 项目场景&#xff1a;问题描述原因分析&#xff1a;解决方案&#xff1a; 项目场景&#xff1a; 在训练模型时候&#xff0c;将数据集输入到网络中去&#xff0c;在执行卷积nn.conv1d()的时候&#xff0c;报出此错误 问题描述 报错…

SpringBoot打造高效多级缓存体系

在数据密集型的应用中&#xff0c;缓存是提高性能的关键工具之一。SpringBoot提供了强大的缓存抽象&#xff0c;允许开发者轻松地实现多级缓存&#xff0c;从而显著提升应用性能。本文将带你深入了解SpringBoot中的多级缓存解决方案&#xff0c;并通过详细的Java示例&#xff0…

IEDA中tomcat日志乱码解决

文章目录 乱码样式原因解决方案参考 乱码样式 原因 乱码原因是编码格式的问题&#xff0c;编码格式不统一&#xff0c;导致显示乱码。 解决方案 统一编码格式。 打开tomcat的配置文件&#xff0c;conf/logging.properties,进行如下修改 进入idea的安装文件中&#xff0c;b…

【docker笔记】Docker网络

Docker网络 容器间的互联和通信以及端口映射 容器IP变动时候可以通过服务名直接网络通信而不受到影响 常用命令 查看网络 docker network ls创建网络 docker network create XXX网络名字查看网络源数据 docker network inspect XXX网络名字删除网络 docker network rm…