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…

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

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

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

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

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;但…

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…

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;报出此错误 问题描述 报错…

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…

竞赛保研 基于深度学习的人脸性别年龄识别 - 图像识别 opencv

文章目录 0 前言1 课题描述2 实现效果3 算法实现原理3.1 数据集3.2 深度学习识别算法3.3 特征提取主干网络3.4 总体实现流程 4 具体实现4.1 预训练数据格式4.2 部分实现代码 5 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 毕业设计…

Linux基础知识点-(七-线程)

目录 一、线程和进程 1.1 线程的基本概念 1.2 线程的优缺点 二、创建线程 2.1 pthread_create() - 创建线程函数 三、线程属性 3.1 pthread_attr_t类型 3.2 phread_t类型 四、线程退出 4.1 pthread_exit() 4.2 pthread_join() 4.3 pthread_detach() 一、线程和进…

2019数据结构----单链表真题

思路&#xff1a; (1)找到中间节点,将原链表一分为二 (2)后半段链表原地逆置 (3)合并链表 #include <stdio.h> #include <stdlib.h>//定义节点类型 typedef struct LNode {int data;//数据域struct LNode *next;//指针域 } LNode, *LinkList;void tailList(Link…

Rational rose 安装和使用 教程

前言 win10和win11都可以用&#xff0c;亲测了win10 Unified Modeling Language (UML)又称统─建模语言或标准建模语言&#xff0c;是始于1997年一个OMG标准&#xff0c;它是一个支持模型化和软件系统开发的图形化语言&#xff0c;为软件开发的所有阶段提供模型化和可视化支持…

Spark---RDD算子(单值类型转换算子)

文章目录 1.RDD算子介绍2.转换算子2.1 Value类型2.1.1 map2.1.2 mapPartitions2.1.3 mapPartitionsWithIndex2.1.4 flatMap2.1.5 glom2.1.6 groupBy2.1.7 filter2.1.8 sample2.1.9 distinct2.1.10 coalesce2.1.11 repartition2.1.12 sortBy 1.RDD算子介绍 RDD算子是用于对RDD进…

15K star! 搭建个人PDF工具箱,和广告、泄密说拜拜

我相信很多人都曾经遇到过这样的麻烦&#xff1a;一大堆PDF文档摆在面前要处理&#xff0c;拆分、标页码、调顺序、加签名。手忙脚乱的在网上找了几个工具&#xff0c;但是要么需要付费&#xff0c;要么各种广告还不好用&#xff0c;更容易出现隐私泄露的问题。 今天我们推荐的…

轨迹合并 合并轨迹

搜索微信小程序 merge gpx

测试电脑的公网ip

发现ip地址总是变化&#xff0c;想要了解变化规律 操作 反复关闭打开浏览器&#xff0c;查询ip地址&#xff0c;共查询了15次。出现了5种不同的地址&#xff0c;还好&#xff0c;不是无穷的。