permission.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { asyncRouterMap, constantRouterMap } from '@/router'
  2. /**
  3. * 过滤异步路由表,返回符合用户角色权限的路由表
  4. * @param asyncRouterMap
  5. * @param menuList
  6. */
  7. function filterAsyncRouter (asyncRouterMap, menuList, permissionList) {
  8. const permissionCodes = permissionList.map(i => i.code)
  9. // menuList 暂时未用到
  10. let accessedRouters = asyncRouterMap.map(route => {
  11. if (route.meta && route.meta.permissionName.length > 0) {
  12. // 取父级菜单与后台权限列表交集
  13. const routePermissions = route.meta.permissionName.join(',')
  14. const intersection = permissionCodes.find((code) => routePermissions.indexOf(code) > -1) || routePermissions.indexOf('all') > -1
  15. // 有交集说明需显示父级
  16. if (intersection) {
  17. // 过滤子路由
  18. route.children = route.children.filter(i => {
  19. if (i.meta && i.meta.permissionName) {
  20. return permissionCodes.find((code) => i.meta.permissionName.indexOf(code) > -1)
  21. } else {
  22. return true
  23. }
  24. })
  25. // 设置子页面权限列表
  26. // route.children.forEach(item => {
  27. // let list = permissionList.filter(i => {
  28. // return !~i.code.indexOf(item.meta.permissionName)
  29. // })
  30. // item.meta.permissionList = list.map(i => {
  31. // return i.split(':')[1]
  32. // })
  33. // })
  34. return route
  35. } else {
  36. return null
  37. }
  38. } else {
  39. return route
  40. }
  41. })
  42. // 去除空元素
  43. accessedRouters = accessedRouters.filter(Boolean)
  44. return accessedRouters
  45. }
  46. const permission = {
  47. state: {
  48. routers: constantRouterMap,
  49. addRouters: []
  50. },
  51. mutations: {
  52. SET_ROUTERS: (state, routers) => {
  53. state.addRouters = routers
  54. state.routers = constantRouterMap.concat(routers)
  55. }
  56. },
  57. actions: {
  58. GenerateRoutes ({ commit }, data) {
  59. return new Promise(resolve => {
  60. const { roleList, resourceList } = data
  61. let accessedRouters = asyncRouterMap
  62. accessedRouters = filterAsyncRouter(asyncRouterMap, roleList, resourceList)
  63. commit('SET_ROUTERS', accessedRouters)
  64. resolve()
  65. })
  66. }
  67. }
  68. }
  69. export default permission