permission.js 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { asyncRouterMap, constantRouterMap } from '@/config/router.config'
  2. /**
  3. * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除
  4. *
  5. * @param permission
  6. * @param route
  7. * @returns {boolean}
  8. */
  9. function hasPermission (permission, route) {
  10. if (route.meta && route.meta.permission) {
  11. let flag = permission.find(item => {
  12. return item&&item == route.meta.permission
  13. })
  14. // let flag = false
  15. // for (let i = 0, len = permission.length; i < len; i++) {
  16. // flag = route.meta.permission.includes(permission[i])
  17. // if (flag) {
  18. // return true
  19. // }
  20. // }
  21. // console.log(flag)
  22. return flag
  23. }
  24. return true
  25. }
  26. /**
  27. * 单账户多角色时,使用该方法可过滤角色不存在的菜单
  28. *
  29. * @param roles
  30. * @param route
  31. * @returns {*}
  32. */
  33. // eslint-disable-next-line
  34. function hasRole(roles, route) {
  35. if (route.meta && route.meta.roles) {
  36. return route.meta.roles.includes(roles.id)
  37. } else {
  38. return true
  39. }
  40. }
  41. function filterAsyncRouter (routerMap, roles) {
  42. const accessedRouters = routerMap.filter(route => {
  43. if (hasPermission(roles.permissionList, route)) {
  44. if (route.children && route.children.length) {
  45. route.children = filterAsyncRouter(route.children, roles)
  46. }
  47. return true
  48. }
  49. return false
  50. })
  51. return accessedRouters
  52. }
  53. const permission = {
  54. state: {
  55. routers: constantRouterMap,
  56. addRouters: []
  57. },
  58. mutations: {
  59. SET_ROUTERS: (state, routers) => {
  60. state.addRouters = routers
  61. state.routers = constantRouterMap.concat(routers)
  62. }
  63. },
  64. actions: {
  65. // 根据权限过滤菜单
  66. GenerateRoutes ({ commit }, data) {
  67. return new Promise(resolve => {
  68. const { roles } = data
  69. const baseRouter = JSON.parse(JSON.stringify(asyncRouterMap))
  70. const accessedRouters = filterAsyncRouter(baseRouter, roles)
  71. commit('SET_ROUTERS', accessedRouters)
  72. resolve()
  73. })
  74. },
  75. // 重置菜单
  76. ResetRoutes ({ commit }) {
  77. return new Promise(resolve => {
  78. commit('SET_ROUTERS', [])
  79. resolve()
  80. })
  81. }
  82. }
  83. }
  84. export default permission