vue router权限管理实现不同角色显示不同路由

yizhihongxing

实现权限管理需要以下步骤:

1. 安装Vue Router

npm install vue-router --save

2. 配置路由

router/index.js文件中,定义路由和对应的组件,并为每个路由定义一个meta字段,用于存放该路由需要的权限。

import Vue from 'vue'
import Router from 'vue-router'
import Home from '../views/Home.vue'
import Admin from '../views/Admin.vue'
import User from '../views/User.vue'

Vue.use(Router)

export const router = new Router({
  routes: [
    {
      path: '/',
      name: 'Home',
      component: Home,
      meta: {
        requiresAuth: false // 不需要权限的路由
      }
    },
    {
      path: '/admin',
      name: 'Admin',
      component: Admin,
      meta: {
        requiresAuth: true, // 需要登录后才能访问的路由
        requiresRole: 'admin' // 需要管理员角色才能访问的路由
      }
    },
    {
      path: '/user',
      name: 'User',
      component: User,
      meta: {
        requiresAuth: true, // 需要登录后才能访问的路由
        requiresRole: 'user' // 需要用户角色才能访问的路由
      }
    }
  ]
})

3. 添加路由守卫

router/index.js文件中,为每个需要权限控制的路由添加路由守卫,判断用户是否登录以及用户角色是否满足访问该路由的要求。如果不满足则跳转到登录页面或者提示无权限访问。同时,也要为不需要权限控制的路由添加路由守卫,防止已登录用户再次访问登录页面。

import { router } from './index'
import { getToken } from '../utils/auth'

const whiteList = ['/'] // 不需要权限的路由

router.beforeEach((to, from, next) => {
  const token = getToken()

  if (token) { // 已登录
    if (to.path === '/login') { // 防止已登录用户访问登录页面
      next({ path: '/' })
    } else {
      if (to.meta.requiresAuth) { // 需要权限控制
        const userRole = localStorage.getItem('userRole')
        if (to.meta.requiresRole === userRole) { // 用户角色满足要求
          next()
        } else { // 用户角色不符合要求
          next({ path: '/' }) // 提示无权限访问
        }
      } else { // 不需要权限控制
        next()
      }
    }
  } else { // 未登录
    if (whiteList.indexOf(to.path) !== -1) { // 不需要权限的路由,直接访问
      next()
    } else { // 需要权限的路由,跳转到登录页面
      next({ path: '/login' })
    }
  }
})

示例1:

比如,管理员角色需要访问后台管理页面,而普通用户不能访问。我们可以这样定义路由:

{
  path: '/admin',
  name: 'Admin',
  component: Admin,
  meta: {
    requiresAuth: true,
    requiresRole: 'admin'
  }
}

在路由守卫中,我们检查该路由是否需要权限控制,以及该用户的角色是否符合要求:

if (to.meta.requiresAuth) {
  const userRole = localStorage.getItem('userRole') // 从localStorage中获取用户角色
  if (to.meta.requiresRole === userRole) { // 用户角色满足要求
    next()
  } else { // 用户角色不符合要求
    next({ path: '/' })
  }
} else {
  next()
}

如果该路由需要权限控制,我们从localStorage中获取该用户的角色,并检查该角色是否等于路由要求的角色。如果不满足要求,则提示无权限访问。

示例2:

比如,未登录用户只能访问登录页面和注册页面,不能访问其他需要权限控制的页面。我们可以这样定义路由:

{
  path: '/login',
  name: 'login',
  component: Login,
  meta: {
    requiresAuth: false
  }
},
{
  path: '/register',
  name: 'register',
  component: Register,
  meta: {
    requiresAuth: false
  }
},
{
  path: '/profile',
  name: 'profile',
  component: Profile,
  meta: {
    requiresAuth: true
  }
}

在路由守卫中,我们为/login/register添加白名单,防止未登录用户访问其他页面:

const whiteList = ['/login', '/register']

if (whiteList.indexOf(to.path) !== -1) { // 不需要权限的路由,直接访问
  next()
} else { // 需要权限的路由,跳转到登录页面
  next({ path: '/login' })
}

如果用户访问的是白名单中的路由,我们直接允许访问。如果访问的是其他路由,则跳转到登录页面。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue router权限管理实现不同角色显示不同路由 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • 从vue源码看props的用法

    从Vue源码到具体的组件使用,props的定义,传递和验证有哪些步骤?如何通过源码学习的方式,深入了解 Vue 的 props 系统? Props 概述 在 Vue.js 中,父组件向子组件通信是通过 prop 进行的。prop 是子组件声明接受的外部参数,其在组件中通过 this.$props 访问。 Props 定义 在组件中,我们可以通过 props …

    Vue 2023年5月27日
    00
  • vue.js语法及常用指令

    下面是关于“vue.js语法及常用指令”的完整攻略。 一、Vue.js语法 Vue.js 是一款流行的 JavaScript 框架,它的语法和模板采用了基于 HTML 的模板语法,简化了前端开发中数据绑定和 DOM 操作的复杂度。下面是 Vue.js 的一些基本语法: 1. 基本模板 Vue.js 的基本模板由普通的 HTML 标签和 Vue.js 的特殊属…

    Vue 2023年5月27日
    00
  • 详解如何使用webpack打包Vue工程

    下面我将为您详细讲解如何使用Webpack打包Vue工程: 环境准备 在使用Webpack打包Vue工程前,我们需要先搭建一些必要的环境: 安装Node.js和npm:Webpack依赖于Node.js和npm,需要先安装Node.js,并将npm更新至最新版本; 全局安装Webpack和Webpack-cli:输入命令npm install -g webp…

    Vue 2023年5月28日
    00
  • 深入浅析vue组件间事件传递

    深入浅析 Vue 组件间事件传递 在 Vue 应用程序中,组件是相互独立的,但有时需要从一个组件向另一个组件传递数据或触发事件。在这种情况下,Vue 允许通过事件传递数据和在组件之间通信。 父子组件之间的事件传递 父子组件之间的事件传递是最简单和最常见的一种情况。Vue 组件中,子组件需要把数据传递给父组件的时候,它可以通过 emit 事件的方式来触发父组件…

    Vue 2023年5月27日
    00
  • 详解Vue 如何监听Array的变化

    当使用 Vue.js 来开发 web 应用时,你会经常遇到需要变更数组中的元素的情况。为了自动更新视图,需要监听数组的变化并重新渲染相关的内容。这里就来详解一下 Vue 如何监听数组变化。 在 Vue2.0 之前,Vue 提供的是一个 $watch 函数来监听数组的变化。但是它有一些局限,他只能监听到数组的拷贝,在数组变化时也会得到通知,但无法监听到数组中元…

    Vue 2023年5月29日
    00
  • Vue2.0生命周期的理解

    关于Vue2.0生命周期的理解,我们可以说是一个Vue开发中的关键知识点之一。下面我会给出完整的攻略,涉及Vue实例的整个生命周期过程,包括各个周期阶段的触发时机、各个周期函数的执行顺序、常见实用场景等等,帮助你更好地理解Vue2.0的生命周期。 何为Vue2.0生命周期 Vue实例参照了生命周期的概念,每个组件(包括根组件)在被创建、更新、销毁时都有自己的…

    Vue 2023年5月28日
    00
  • SpringBoot和Vue.js实现的前后端分离的用户权限管理系统

    下面我将给你详细讲解实现“SpringBoot和Vue.js实现的前后端分离的用户权限管理系统”的完整攻略。 概述 要实现前后端分离的用户权限管理系统,首先需要涉及到的技术栈包括SpringBoot、Vue.js、Spring Security、JWT(token)等,其中Spring Security是前后端分离中实现鉴权的关键技术,JWT是用来生成权限认…

    Vue 2023年5月28日
    00
  • 浅谈Vue3.0新版API之composition-api入坑指南

    浅谈Vue3.0新版API之composition-api入坑指南 随着Vue3.0版本的发布,新版API也推出了许多新特性,其中最为引人注目的便是composition-api。如何使用新特性,帮助开发者更高效地编写Vue应用,将是本文所要探讨的内容。 什么是composition-api composition-api是Vue3.0版本全新的特性,它是一…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部