text: import { asyncRouterMap, constantRouterMap } from '@/router'
  
  /**
   * 通过meta.role判断是否与当前用户权限匹配
   * @param roles
   * @param route
   */
  function hasPermission(roles, route) {
      if (route.meta && route.meta.roles) {
          return roles.some(role => route.meta.roles.includes(role))
      } else {
          return true
      }
  }
  
  /**
   * 递归过滤异步路由表，返回符合用户角色权限的路由表
   * @param routes asyncRouterMap
   * @param roles
   */
  function filterAsyncRouter(routes, roles) {
      const res = []
  
      routes.forEach(route => {
          const tmp = { ...route }
          if (hasPermission(roles, tmp)) {
              if (tmp.children) {
                  tmp.children = filterAsyncRouter(tmp.children, roles)
              }
              res.push(tmp)
          }
      })
  
      return res
  }
  
  const permission = {
      state: {
          routers: constantRouterMap,
          addRouters: []
      },
      mutations: {
          SET_ROUTERS: (state, routers) => {
              state.addRouters = routers
              state.routers = constantRouterMap.concat(routers)
          }
      },
      actions: {
      // 如果为admin，则返回所有的异步路由，如果不是admin，则根据mate里面是否有某种角色返回特定的路由
          GenerateRoutes({ commit }, data) {
              return new Promise(resolve => {
                  const { roles } = data
                  let accessedRouters
                  if (roles.includes('admin')) {
                      // 角色包含admin，直接获取所有异步路由
                      accessedRouters = asyncRouterMap
                  } else {
                      accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
                  }
                  commit('SET_ROUTERS', accessedRouters)
                  resolve()
              })
          }
      }
  }
  
  export default permission
  