12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- import { asyncRouterMap, constantRouterMap } from '@/router'
- /**
- * 通过meta.role判断是否与当前用户权限匹配
- * @param roles
- * @param route
- */
- function hasPermission(roles, route) {
- debugger
- if (route.meta && route.meta.roles) {
- return roles.some(role => route.meta.roles.indexOf(role) >= 0)
- } else {
- return true
- }
- }
- /**
- * 递归过滤异步路由表,返回符合用户角色权限的路由表
- * @param asyncRouterMap
- * @param roles
- */
- function filterAsyncRouter(asyncRouterMap, roles) { // 闭包查找所有该roles下的路由
- debugger
- const accessedRouters = asyncRouterMap.filter(route => {
- if (hasPermission(roles, route)) {
- if (route.children && route.children.length) {
- route.children = filterAsyncRouter(route.children, roles)
- }
- return true
- }
- return false
- })
- return accessedRouters
- }
- const permission = {
- state: {
- routers: constantRouterMap,
- addRouters: []
- },
- mutations: {
- SET_ROUTERS: (state, routers) => {
- state.addRouters = routers
- state.routers = constantRouterMap.concat(routers)
- console.log('state.routers', state.routers)
- }
- },
- actions: {
- GenerateRoutes({ commit }, data) {
- return new Promise(resolve => {
- const { roles } = data
- debugger
- let accessedRouters
- if (roles.indexOf('3') >= 0) { // 如果是admin 直接加载所有路由 超级管理员
- accessedRouters = asyncRouterMap
- // debugger
- } else {
- accessedRouters = filterAsyncRouter(asyncRouterMap, roles) // 否则根据权限搜索路由
- // accessedRouters = ''
- // accessedRouters = asyncRouterMap
- }
- console.log('accessedRouters', accessedRouters)
- commit('SET_ROUTERS', accessedRouters)
- resolve()
- })
- }
- }
- }
- export default permission
|