permission.js 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { asyncRouterMap, constantRouterMap } from '@/router'
  2. /**
  3. * 通过meta.role判断是否与当前用户权限匹配
  4. * @param roles
  5. * @param route
  6. */
  7. function hasPermission(roles, route) {
  8. debugger
  9. if (route.meta && route.meta.roles) {
  10. return roles.some(role => route.meta.roles.indexOf(role) >= 0)
  11. } else {
  12. return true
  13. }
  14. }
  15. /**
  16. * 递归过滤异步路由表,返回符合用户角色权限的路由表
  17. * @param asyncRouterMap
  18. * @param roles
  19. */
  20. function filterAsyncRouter(asyncRouterMap, roles) { // 闭包查找所有该roles下的路由
  21. console.log(asyncRouterMap, roles)
  22. // debugger
  23. const accessedRouters = asyncRouterMap.filter(route => {
  24. // const temp = []
  25. console.log(roles, route, route.children)
  26. route.children = route.children.filter(v => {
  27. // console.log(roles, v)
  28. console.log(v,v.meta)
  29. if (v.meta && v.meta.roles && (v.meta.roles[0] == roles[0])) {
  30. console.log(v.meta.roles[0] == roles[0])
  31. return true
  32. } else {
  33. return false
  34. }
  35. })
  36. console.log(9,route.children)
  37. return route
  38. // if (hasPermission(roles, route.childer)) {
  39. // if (route.children && route.children.length) {
  40. // // route.children = filterAsyncRouter(route.children, roles)
  41. // }
  42. // return true
  43. // }
  44. // return false
  45. })
  46. console.log(accessedRouters)
  47. return accessedRouters
  48. }
  49. const permission = {
  50. state: {
  51. routers: constantRouterMap,
  52. addRouters: []
  53. },
  54. mutations: {
  55. SET_ROUTERS: (state, routers) => {
  56. state.addRouters = routers
  57. state.routers = constantRouterMap.concat(routers)
  58. console.log('state.routers', state.routers)
  59. }
  60. },
  61. actions: {
  62. GenerateRoutes({ commit }, data) {
  63. return new Promise(resolve => {
  64. const { roles } = data
  65. let accessedRouters
  66. console.log(asyncRouterMap, roles)
  67. accessedRouters = filterAsyncRouter(asyncRouterMap, roles) // 否则根据权限搜索路由
  68. // accessedRouters = ''
  69. console.log('accessedRouters', accessedRouters)
  70. commit('SET_ROUTERS', accessedRouters)
  71. resolve()
  72. })
  73. }
  74. }
  75. }
  76. export default permission