Vue3 權限路由

news/2024/7/10 2:52:49 标签: 前端, javascript, vue, 路由權限

最近接觸到關於role 能夠查看相關頁面的功能

最初的作法是全部的路由使用動態加載,考慮到 跟權限有關係 ,就有可能各種頁面都需要調用,因此這裡的role狀態會儲存在全局狀態管理中(pinia)

1.首先區隔出需要權限才能瀏覽的頁面,命名為dynamicRoutes

javascript">// 要有權限才能access的路由
export const dynamicRoutes = [
  {
    name: 'NotificationManagement',
    path: 'notification',
    component: () => import('pages/NotificationManagement'),
  },

  {
    name: 'MemberManagement',
    path: 'member',
    component: () => import('pages/MemberManagement'),
  },
]

在首次加載時先判斷動態路由,如果為superuser則加入動態的路由 

新版本router.addRoutes已废弃:使用 router.addRoute() 代替。
官方的解释是 router.addRoute 接受的是一个路由规则,也就是一个对象,或者接受一个字符串和一个对象。

javascript">

function addRoutes(router, userStore) {
  if ((userStore.user.role || '').toLowerCase() === 'superuser') {
    dynamicRoutes.forEach(function (route) {
      router.addRoute('main', route)
    })
  }
}
// 一載入時先調用
addRoutes(router)

然而以上的方法,顯而易見的是如果使用者的role在途中變換的話就無法去同時更新動態路由,因此第二個方法延伸~

使用RouterBefore

在路由的meta中添加哪個角色有閱覽的權利

javascript">// router.js
{     
 name: 'Member',
 path: 'member',
 meta: {
   auth: true,
   role: ['manager'],
 },
 component: () => import('pages/Member'),
}

每次跳轉路由時,都會去獲取全局的角色狀態,這裡就可以避免如果使用者中途變換角色的問題,因為每次跳轉時都會去獲取該用戶的角色,與此同時獲取將要跳轉頁面的資訊(meta: {role})

javascript">router.beforeEach((to, from, next) => {
 const roles = to.meta.role
 const userRole = (userStore.user.role || '').toLowerCase()
 if (roles && !roles.includes(userRole)) {
   next('/404')
   return
 }

 next()
})

以上就是路由權限的功能~


http://www.niftyadmin.cn/n/355774.html

相关文章

Kubernetes 集群上的部署JAVA 步骤

一个基本的 Java 应用程序在 Kubernetes 集群上的部署步骤(使用命令行进行部署): 编写 Dockerfile 首先,在 Java 应用程序项目根目录下创建一个 Dockerfile 文件。假设你的 Java 项目是使用 Maven 进行构建的,那么你…

【技术】多端能力服务统一是一种关键的技术和架构

多端能力服务统一是一种关键的技术和服务架构,旨在为不同终端设备提供一致的用户体验和功能。通过采用前端和后端技术的组合,如响应式 Web 设计、PWA、跨平台移动应用开发框架、RESTful API、GraphQL、WebSocket、Serverless 架构和微服务架构&#xff0…

【精】MySQL5.7没有row_number()函数如何组内排序和求分组topN

当我们遇到一些需求,比如组内分组排序,分组topN等,很容易想到用row_number()函数 ​在MySQL8.0版本中支持row_number函数,本文不做讨论,如果是MySQL5.7版本,要怎么写SQL呢? 测试表:…

Mybatis intercepter 扩展点生效原理

1、 MybatisSqlSessionFactoryBean 通过 setPlugins 添加插件 2、buildSqlSessionFactory() 给Configuration添加插件 if (!isEmpty(this.plugins)) {Stream.of(this.plugins).forEach(plugin -> {targetConfiguration.addInterceptor(plugin);LOGGER.debug(() -> &…

Flink用户自定义连接器(Table API Connectors)学习总结

文章目录 前言背景官网文档概述元数据解析器运行时的实现 自定义扩展点工厂类Source扩展Sink和编码与解码 自定义flink-http-connectorSQL示例具体代码pom依赖HttpTableFactoryHttpTableSourceHttpSourceFunctionHttpClientUtil 最后参考资料 前言 结合官网文档和自定义实现一…

【ChatgGPT】ChatgGPT生成Excel提取字符公式

参考视频:https://edu.csdn.net/learn/38346/613668 问题场景:网站用户发帖统计excel表中,C,D,E.F列有每个用户每周发布的文章数量,只有每周发布文章都至少2篇及以上的才有奖品。如何写excel公式来找出符合条件的人? 1.下载所需…

es 二、核心概念

目录 Nrt cluster集群概念 node节点 Document 文档 Index 索引 Field字段 Type 类型 shard分片 Replica shard副本 数据库和es概念对比 Nrt 写入一秒后就能搜到 cluster集群概念 一台机器启动一个实例即可,多个组成 node节点 一个实例一个节点 Documen…

AttributeError: module ‘gym‘ has no attribute ‘benchmark_spec‘解决办法

报错如下: 我安装的gym版本是gym-0.26.2 报错原因:gym版本太高了,需要降低版本 pip install gym0.9.0 -i https://pypi.douban.com/simple