您的位置:首页 > 编程学习 > > 正文

vue动态路由实现权限控制(vue2/vue3路由权限管理的方法实例)

更多 时间:2021-10-29 14:26:12 类别:编程学习 浏览量:2391

vue动态路由实现权限控制

vue2/vue3路由权限管理的方法实例

1. Vue 路由权限控制一般有2种方法

a、路由元信息(meta)
b、动态加载菜单和路由(addRoutes)

2 路由元信息(meta)来进行路由权限控制

2.1 在vue2种的实现

如果一个网站有不同的角色,比如 管理员 和 普通用户 ,要求不同的角色能访问的页面是不一样的

这个时候我们就可以 把所有的页面都放在路由表里 ,只要 在访问的时候判断一下角色权限 。如果有权限就让访问,没有权限的话就拒绝访问,跳转到404页面

vue-router 在构建路由时提供了元信息 meta 配置接口,我们可以在元信息中添加路由对应的权限,然后在路由守卫中检查相关权限,控制其路由跳转。

可以在每一个路由的 meta 属性里,将能访问该路由的角色添加到 roles 里。用户每次登陆后,将用户的角色返回。然后在访问页面时,把路由的 meta 属性和用户的角色进行对比,如果用户的角色在路由的 roles 里,那就是能访问,如果不在就拒绝访问。

以下是vue2的实现方式:

  • import VueRouter from 'vue-router';
    Vue.use(VueRouter)
    ...
    routes: [
      {
        path: '/login',
        name: 'login',
        meta: {
          roles: ['admin', 'user']
        },
        component: () => import('../components/Login.vue')
      },
      {
        path: 'home',
        name: 'home',
        meta: {
          roles: ['admin']
        },
        component: () => import('../views/Home.vue')
      },
    ]
    
    const router = new VueRouter({
      routes
    })
    
    export default router
    
    
  • 在app.vue文件下引入,注册全局的路由守卫

  • //假设有两种角色:admin 和 user 
    //从后台获取的用户角色
    const role = 'user'
    //当进入一个页面是会触发导航守卫 router.beforeEach 事件
    router.beforeEach((to,from,next)=>{
      if(to.meta.roles.includes(role)){
       next() //放行
      }esle{
       next({path:"/404"}) //跳到404页面
      }
    })
    
    
  • 自此基本上路由的权限控制就完成了

    题外话 在路由守卫中也能很好的解决匹配不到路由转404页面的业务需求,实现如下:

  • import router from ‘./router‘
    router.beforeEach((to, from, next) => {
       // ...
        if (to.matched.length === 0) {
            next('/404')
        } else {
            next()
        }
        //console.log(to, from, next, '路由守卫')
    })
    
    
  • 2.2 在vue3种的实现

    其实思路都是差不多的,只是要注意的是vue3中使用路由的方式和vue2有一些细微的差异,使用我用更简单的404去创建vue3的实例,关于vue3的路由权限控制可以按vue2和下面代码依葫芦画瓢,实现代码如下:

    创建路由:

  • import { createRouter, createWebHashHistory } from 'vue-router';
    ...
    routes: [
      {
        path: '/login',
        name: 'login',
        meta: {
          roles: ['admin', 'user']
        },
        component: () => import('../components/Login.vue')
      },
      {
        path: 'home',
        name: 'home',
        meta: {
          roles: ['admin']
        },
        component: () => import('../views/Home.vue')
      },
    ]
    const router = createRouter({
        history: createWebHashHistory(),
        routes: routers
    })
    export default router;
    
    
  • 路由守卫(在App.vue里面进行全局注册):

  • import {
        useRouter
    } from 'vue-router';
    export default {
        name: 'App',
        setup() {
            const router = useRouter();
            router.beforeEach((to, from, next) => {
                // ...
                if (to.matched.length === 0) {
                    next('/404')
                } else {
                    next()
                }
            })
        }
    }
    
    
  • 4 . 动态加载菜单和路由(addRoutes)

    根据用户权限或者是用户属性去动态的添加菜单和路由表,可以实现对用户的功能进行定制,vue-router 提供了 addRoutes() 方法,可以动态注册路由, 需要注意的是,动态添加路由是在路由表中 push 路由,由于路由是按顺序匹配的,因此需要将诸如404页面这样的路由放在动态添加的最后

    5.总结

    不管是vue2还是vue3,其实实现思想都差不多,只是使用接口细节会有少许的不一样,使用对我们来说学习的重点千万不能放在某一个框架上,而是要训练自己的思维

    到此这篇关于vue2/vue3路由权限管理的文章就介绍到这了,更多相关vue路由权限管理内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!

    标签:vue 路由 权限