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

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

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-cli3在main.js中console.log()会报错的解决

    在VueCLI3中,为了更加方便地创建和管理项目,工具链对Webpack进行了封装,因此我们无法直接在main.js中使用“console.log()”等JS原生方法。在这种情况下,我们可以使用VueCLI提供的“vue.config.js”文件来解决该问题。 下面是解决方案的详细步骤: 在项目根目录下创建“vue.config.js”文件。如果已经存在该文…

    Vue 2023年5月27日
    00
  • 用electron 打包发布集成vue2.0项目的操作过程

    下面是用Electron打包发布集成Vue2.0项目的操作过程的完整攻略,包括以下步骤: 1. 创建Vue2.0项目 首先,我们需要使用Vue CLI创建一个Vue2.0项目。如果您还没有安装Vue CLI,请先使用以下命令进行安装: npm install -g @vue/cli 然后,使用以下命令创建项目: vue create my-project 其…

    Vue 2023年5月28日
    00
  • 利用Vue v-model实现一个自定义的表单组件

    实现一个自定义的表单组件,我们通常需要用到Vue.js中的组件。这个组件将包含一些输入元素,例如输入框、下拉框、单选框、复选框等等。这些元素需要收集数据并传递给父组件,以便在父组件中进行处理。 为了实现这个功能,我们可以利用Vue.js提供的v-model指令。v-model指令是一个双向数据绑定指令,它将数据绑定到表单元素的value属性上。当用户在输入框…

    Vue 2023年5月28日
    00
  • Vue实现在线预览pdf文件功能(利用pdf.js/iframe/embed)

    下面我将为你详细讲解如何用Vue实现在线预览pdf文件功能,对应的技术包括pdf.js、iframe、embed等。 1. 准备工作 首先,需要下载pdf.js(官网地址)并引入到Vue项目中。在main.js中引入如下: import pdfjsLib from ‘pdfjs-dist/build/pdf’; import pdfWorker from ‘…

    Vue 2023年5月28日
    00
  • vue 中使用print.js导出pdf操作

    下面是详细讲解 “Vue 中使用 print.js 导出 PDF 操作” 的完整攻略: 一、什么是 Print.js Print.js 是一个简单的打印插件,可以让你轻松地打印任何元素。不需要额外的 CSS,只需要调用它的 JavaScript 函数即可。此外,它还支持导出为 PDF 格式。 二、安装 Print.js 你可以使用 npm 或直接在 HTML…

    Vue 2023年5月27日
    00
  • vue如何使用cookie、localStorage和sessionStorage进行储存数据

    让我来为你详细讲解Vue如何使用cookie、localStorage和sessionStorage进行数据储存。 什么是cookie、localStorage和sessionStorage? Cookie:HTTP是一种无状态协议,为了记录用户的状态,引入了cookie技术。Cookie是存储在浏览器中的小型文本文件。它通过在用户计算机中存储信息来跟踪用户…

    Vue 2023年5月27日
    00
  • 细说Vue组件的服务器端渲染的过程

    Vue组件的服务器端渲染,是指在服务器端将Vue组件编译为HTML字符串,然后将其发送给客户端浏览器。该过程主要包含以下几个步骤: 配置服务器环境 首先需要配置服务器环境,以便在服务器端运行Vue组件。这包括安装Node.js和Vue Server Renderer等相关模块。另外,需要对服务器进行一些基本设置,如监听端口、创建路由和管理静态资源等。 创建V…

    Vue 2023年5月27日
    00
  • Vue 组件(component)教程之实现精美的日历方法示例

    针对“Vue 组件(component)教程之实现精美的日历方法示例”,我可以介绍它的完整攻略,包括以下几部分内容: 理解 Vue 组件 在进入日历组件的实现前,首先需要理解什么是 Vue 组件。Vue 组件是 Vue.js 中的基本概念,它可以把一个页面拆分成若干独立、可重用的模块,并将这些模块进行拼装组合成为一个完整的页面。因此,理解 Vue 组件的分类…

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