后台管理系统基于角色来渲染不同的menu-item

简介: 后台管理系统基于角色来渲染不同的menu-item

渲染对应的menu-item其实需要看后端返回什么样的数据结构,我们才来确定用何种方式渲染。然后来添加动态路由。


在注册所有menu-item对应的路由映射


这个方法虽然很简单,但是不能避免用户在浏览器输入框中输入正确的url,渲染出了该角色不具备的menu-item对应的路由。


根据后端返回的不同角色,在前端事先写好每个角色对应的路由映射


我们登录的时候,会返回用户的数据,我们根据该用户的角色,来匹配到前端写好的路由映射。


{
        superAdmin: [{path, component}, {...}],
        others: [{path, component}, {...}],
        ...
    }


这种方法,当后端新增了角色,我们就得在前端写好该角色的对应的路由映射数组。


根据后端返回的不同角色,然后请求该角色对应的权限列表。


这个方法,需要后端和后端高度的配合,它需要返回该角色对应的权限列表。内部提供路由映射的url。


[
  {
    "id": 1,
    "name": "系统管理",
    "icon": "<tools />",
    "type": 1,
    "url": "/main/system",
    "children": [
      {
        "id": "1-1",
        "name": "用户管理",
        "type": 2,
        "url": "/main/system/user"
      },
      {
        "id": "1-2",
        "name": "部门管理",
        "type": 2,
        "url": "/main/system/department"
      },
      {
        "id": "1-3",
        "name": "菜单管理",
        "type": 2,
        "url": "/main/system/menu"
      },
      {
        "id": "1-4",
        "name": "角色管理",
        "type": 2,
        "url": "/main/system/role"
      }
    ]
  }
]


然后前端提供给url和component的映射文件。


const category = () => import('@/views/main/product/category/category.vue')
    export default {
      path: '/main/product/category',
      name: 'category',
      component: category,
      children: []
    }


然后自己定义一个工具方法,来根据不同的角色映射不同的路由。


  • 先将超级管理员权限中的路由映射收集到一个数组中


  • 然后根据不同角色来筛选路由


  • 将筛选后的路由动态添加到routes对应的位置中。


import { RouteRecordRaw } from 'vue-router'
    export default function MapRoute(userMenus: any): RouteRecordRaw[] {
      const routes: RouteRecordRaw[] = []
      // 将该后台管理超级管理员中的url都映射出来,然后根据不用用户来筛选出路由映射
      const allRoutes: RouteRecordRaw[] = []
      // 表示递归擦选router/main文件下的ts文件。
      const routeFiles = require.context('../router/main', true, /\.ts/)
      routeFiles.keys().forEach((item) => {
        // console.log('item', item)
        // 将ts文件导出的route添加到allRoutes
        const route = require('../router/main' + item.split('.')[1])
        allRoutes.push(route.default)
      })
      // 根据userMenus来筛选路由映射,递归
      const _recurseGetRoute = (menus: any[]) => {
        for (const menu of menus) {
          if (menu.type === 2) {
            const route = allRoutes.find((route) => route.path === menu.url)
            if (route) {
              routes.push(route)
            }
          } else {
            _recurseGetRoute(menu.children)
          }
        }
      }
      _recurseGetRoute(userMenus)
      return routes
    }


相关文章
|
JSON 前端开发 API
TDesign中后台管理系统-用户登录
TDesign中后台管理系统-用户登录
|
JavaScript
【登录界面】vue、element-ui登录界面模板
这里总结一个用vue、element-ui写的登录界面,为以后复制粘贴备用
1518 0
【登录界面】vue、element-ui登录界面模板
|
17天前
|
JavaScript 容器
vue-element-admin 综合开发二:搭建首页架子、侧边栏、修改默认样式、menu和路由跳转页面初体验
这篇文章详细介绍了如何使用Vue和Element UI搭建一个后台管理系统,包括首页布局、侧边栏、样式调整、菜单和路由配置,以及解决开发中遇到的问题。
42 1
vue-element-admin 综合开发二:搭建首页架子、侧边栏、修改默认样式、menu和路由跳转页面初体验
|
2月前
|
XML JavaScript 数据格式
uni-app 根据用户不同身份显示不同的tabBar
uni-app 根据用户不同身份显示不同的tabBar
367 62
|
JSON 前端开发 JavaScript
【Layui】掌握的LayUI树形权限菜单,助力你的权限管理!
LayUI是一款基于jQuery的前端UI框架,而树形权限菜单是一种常见的网页导航菜单设计。LayUI树形权限菜单结合了LayUI框架的特性和树状结构的展示方式,用于实现对用户权限的管理和控制。树形权限菜单通常由多层级的树状菜单构成,每个节点表示一个功能或者页面,父节点表示上级菜单,子节点表示下级菜单。通过这种层级结构,可以清晰地展示网站或系统的功能模块之间的关系。权限管理是指根据用户的角色或权限级别对不同的用户展示不同的菜单选项。
|
6月前
uni-app 10.3个人设置页开发(三)操作菜单
uni-app 10.3个人设置页开发(三)操作菜单
39 0
uni-app 10.3个人设置页开发(三)操作菜单
|
6月前
|
JSON 数据格式
element ui实现多层级复杂表单的操作(添加与回显)之添加功能实现
element ui实现多层级复杂表单的操作(添加与回显)之添加功能实现
|
12月前
Element UI 重置表单功能
Element UI 重置表单功能
|
前端开发
el-tree菜单权限配置--是否要联动的问题
el-tree菜单权限配置--是否要联动的问题
148 1
Vue--element实现编辑会员功能
Vue--element实现编辑会员功能