千锋教育-做有情怀、有良心、有品质的职业教育机构

400-811-9990
手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

领取全套视频
千锋教育

关注千锋学习站小程序
随时随地免费学习课程

上海
  • 北京
  • 郑州
  • 武汉
  • 成都
  • 西安
  • 沈阳
  • 广州
  • 南京
  • 深圳
  • 大连
  • 青岛
  • 杭州
  • 重庆
当前位置:贵阳千锋IT培训  >  技术干货  >  vue递归菜单实现权限关联菜单

vue递归菜单实现权限关联菜单

来源:千锋教育
发布人:qyf
时间: 2023-02-16 20:14:46

vue递归菜单实现权限关联菜单

  权限菜单的实现有多种做法,最常见的两种做法是:

  1登陆成功,服务端直接返回权限列表路由,然后遍历展示菜单。

  2 事先配置好一份儿路由表,然后针对不同的路由对象,分配对应的字段,根据用户权限字段进行递归匹配

  路由表如下:

  const asyncRoutes = [

  {

  path: '/permission',

  component: Layout,

  redirect: '/permission/page',

  alwaysShow: true, // will always show the root menu

  name: 'Permission',

  meta: {

  title: 'Permission',

  icon: 'lock',

  roles: ['admin'] // you can set roles in root nav

  },

  children: [

  {

  path: 'page',

  component: () => import('@/views/permission/page'),

  name: 'PagePermission',

  meta: {

  title: 'Page Permission',

  roles: ['admin'] // or you can only set roles in sub nav

  }

  },

  {

  path: 'directive',

  component: () => import('@/views/permission/directive'),

  name: 'DirectivePermission',

  meta: {

  title: 'Directive Permission'

  // if do not set roles, means: this page does not require permission

  }

  },

  {

  path: 'role',

  component: () => import('@/views/permission/role'),

  name: 'RolePermission',

  meta: {

  title: 'Role Permission',

  roles: ['admin']

  }

  }

  ]

  },

  {

  path: '/icon',

  component: Layout,

  children: [

  {

  path: 'index',

  component: () => import('@/views/icons/index'),

  name: 'Icons',

  meta: { title: 'Icons', icon: 'icon', noCache: true }

  }

  ]

  },

  /** when your routing map is too long, you can split it into small modules **/

  componentsRouter,

  chartsRouter,

  nestedRouter,

  tableRouter,

  {

  path: '/example',

  component: Layout,

  redirect: '/example/list',

  name: 'Example',

  meta: {

  title: 'Example',

  icon: 'el-icon-s-help'

  },

  children: [

  {

  path: 'create',

  component: () => import('@/views/example/create'),

  name: 'CreateArticle',

  meta: { title: 'Create Article', icon: 'edit' }

  },

  {

  path: 'edit/:id(\\d+)',

  component: () => import('@/views/example/edit'),

  name: 'EditArticle',

  meta: { title: 'Edit Article', noCache: true, activeMenu: '/example/list' },

  hidden: true

  },

  {

  path: 'list',

  component: () => import('@/views/example/list'),

  name: 'ArticleList',

  meta: { title: 'Article List', icon: 'list' }

  }

  ]

  },

  {

  path: '/tab',

  component: Layout,

  children: [

  {

  path: 'index',

  component: () => import('@/views/tab/index'),

  name: 'Tab',

  meta: { title: 'Tab', icon: 'tab' }

  }

  ]

  },

  {

  path: '/error',

  component: Layout,

  redirect: 'noRedirect',

  name: 'ErrorPages',

  meta: {

  title: 'Error Pages',

  icon: '404'

  },

  children: [

  {

  path: '401',

  component: () => import('@/views/error-page/401'),

  name: 'Page401',

  meta: { title: '401', noCache: true }

  },

  {

  path: '404',

  component: () => import('@/views/error-page/404'),

  name: 'Page404',

  meta: { title: '404', noCache: true }

  }

  ]

  },

  ]

  每个路由表的路由对象在配置的时候meta字段里面有roles:['admin']这样的字段,或者多个

  例如roles:['admin','editor',xxxx]多权限叠加,这个时候我们就需要遍历菜单,找到符合条件的项,代码如下

  function hasPermission(roles, route) { // ['editor']

  if (route.meta && route.meta.roles) {

  return roles.some(role => route.meta.roles.includes(role)) // ['editor']

  } else {

  return true

  }

  }

  function filterAsyncRoutes(routes, roles) {

  const res = []

  // 异步路由数组对象

  routes.forEach(route => {

  const tmp = { ...route }

  if (hasPermission(roles, tmp)) {

  if (tmp.children) {

  tmp.children = filterAsyncRoutes(tmp.children, roles) // ['editor']

  }

  res.push(tmp)

  }

  })

  return res

  }

  通过上面代码可以获取匹配权限的路由,然后在左侧菜单显示,角色关联权限,权限关联菜单

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。

猜你喜欢LIKE

MyBatis是什么?

2023-06-06

Vue中组件和插件有什么区别?

2023-02-17

vue递归菜单实现权限关联菜单

2023-02-16

最新文章NEW

Vue项目中如何解决跨域?

2023-02-17

Vue双向数据绑定是什么?

2023-02-17

vue和react之间的共同点以及不同点

2023-02-17

相关推荐HOT

更多>>

快速通道 更多>>

最新开班信息 更多>>

网友热搜 更多>>