permission.js 1.26 KB
import { asyncRoutes, constantRoutes } from '@/router'

function hasPermission(permissions, route) {
  if (route.meta?.permissions) {
    return permissions?.some(permission => route.meta.permissions.includes(permission))
  } else {
    return true
  }
}

export function filterAsyncRoutes(routes, permissions) {
  return routes.filter(route => {
    if (!hasPermission(permissions, route)) {
      return false
    }
    if (!route.children?.length) {
      return true
    }
    route.children = filterAsyncRoutes(route.children, permissions)
    return route.children?.length
  })
}

const state = {
  routes: [],
  addRoutes: []
}

const mutations = {
  SET_ROUTES: (state, routes) => {
    state.addRoutes = routes
    state.routes = constantRoutes.concat(routes)
  }
}

const actions = {
  generateRoutes({ commit }, { permissions, type }) {
    return new Promise(resolve => {
      let accessedRoutes
      if (type === 'admin') {
        accessedRoutes = asyncRoutes ?? []
      } else {
        accessedRoutes = filterAsyncRoutes(asyncRoutes, permissions)
        console.log('accessedRoutes', accessedRoutes)
      }
      commit('SET_ROUTES', accessedRoutes)
      resolve(accessedRoutes)
    })
  }
}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}