动态路由和静态路由/页面权限控制

899 阅读1分钟

一.路由

静态路由 不需要权限就可以访问的页面

动态路由 需要权限访问的页面

1.拆分静态路由和动态路由

图一

image.png 2.准备页面

批量创建 mkdir 文件名 文件名 image.png

3.模块化路由

批量创建js touch

image.png

4.配置路由


// 公共布局
import Layout from '@/layout'export default {
  path: '/employees',
  component: Layout,
  children: [
    // 员工列表
    {
      path: '', // 空或和父路由路径一样会被默认加载
      name: 'employees', // 权限的标识
      component: () => import('@/views/employees/index'),
      // 配置左侧菜单信息
      meta: {
        title: '员工管理', // 菜单名字
        icon: 'people' // 菜单图标
      }
    },
    // 某个员工详情
    {
      path: '/employees/detail/:id',
      component: () => import('@/views/employees/detail'),
      hidden: true, // 不在左侧菜单显示
      meta: {
        title: '员工详情'
      }
    }
  ]
}

5.引入合并所有动态路由

如图一

二.页面权限控制

RBAC(Role-Based Access control) ,也就是基于角色的权限分配解决方案,相对于传统方案,RBAC提供了中间层Role(角色),其权限模式如下

image.png 通过控制动态路由实现控制权限

image.png 1.获取用户权限菜单数据

通过vuex获取信息时return roles

2.和所有动态路由做过滤得到最终权限菜单

3.添加到路由的配置

在permission.js

image.png 4.通过vuex存储路由

由于菜单渲染是通过router.options.routes 通过动态添加的路由不会显示在options.routes中 所以通过vuex来存储路由

image.png 5.修改菜单渲染为vuex存储的路由

image.png 6.动态路由刷新问题修复

刷新404问题

image.png 将404路由添加到动态路由之后