permission.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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. return flag
  22. }
  23. return true
  24. }
  25. /**
  26. * 单账户多角色时,使用该方法可过滤角色不存在的菜单
  27. *
  28. * @param roles
  29. * @param route
  30. * @returns {*}
  31. */
  32. // eslint-disable-next-line
  33. function hasRole(roles, route) {
  34. if (route.meta && route.meta.roles) {
  35. return route.meta.roles.includes(roles.id)
  36. } else {
  37. return true
  38. }
  39. }
  40. function filterAsyncRouter (routerMap, roles) {
  41. const accessedRouters = routerMap.filter(route => {
  42. if (hasPermission(roles.permissionList, route)) {
  43. if (route.children && route.children.length) {
  44. route.children = filterAsyncRouter(route.children, roles)
  45. }
  46. return true
  47. }
  48. return false
  49. })
  50. return accessedRouters
  51. }
  52. const permission = {
  53. state: {
  54. routers: constantRouterMap,
  55. addRouters: []
  56. },
  57. mutations: {
  58. SET_ROUTERS: (state, routers) => {
  59. state.addRouters = routers
  60. state.routers = constantRouterMap.concat(routers)
  61. }
  62. },
  63. actions: {
  64. // 根据权限过滤菜单
  65. GenerateRoutes ({ commit }, data) {
  66. return new Promise(resolve => {
  67. const { roles } = data
  68. const baseRouter = JSON.parse(JSON.stringify(asyncRouterMap))
  69. const accessedRouters = filterAsyncRouter(baseRouter, roles)
  70. commit('SET_ROUTERS', accessedRouters)
  71. resolve()
  72. })
  73. },
  74. // 重置菜单
  75. ResetRoutes ({ commit }) {
  76. return new Promise(resolve => {
  77. commit('SET_ROUTERS', [])
  78. resolve()
  79. })
  80. }
  81. }
  82. }
  83. export default permission