permission.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 = false
  12. if (permission!==undefined){
  13. for (let i = 0, len = permission.length; i < len; i++) {
  14. flag = route.meta.permission.includes(permission[i])
  15. if (flag) {
  16. return true
  17. }
  18. }
  19. }
  20. return false
  21. }
  22. return true
  23. }
  24. /**
  25. * 单账户多角色时,使用该方法可过滤角色不存在的菜单
  26. *
  27. * @param roles
  28. * @param route
  29. * @returns {*}
  30. */
  31. // eslint-disable-next-line
  32. function hasRole(roles, route) {
  33. if (route.meta && route.meta.roles) {
  34. return route.meta.roles.includes(roles.id)
  35. } else {
  36. return true
  37. }
  38. }
  39. function filterAsyncRouter (routerMap, roles) {
  40. const accessedRouters = routerMap.filter(route => {
  41. if (hasPermission(roles.permissionList, route)) {
  42. if (route.children && route.children.length) {
  43. route.children = filterAsyncRouter(route.children, roles)
  44. }
  45. return true
  46. }
  47. return false
  48. })
  49. return accessedRouters
  50. }
  51. const permission = {
  52. state: {
  53. routers: constantRouterMap,
  54. addRouters: []
  55. },
  56. mutations: {
  57. SET_ROUTERS: (state, routers) => {
  58. state.addRouters = routers
  59. state.routers = constantRouterMap.concat(routers)
  60. }
  61. },
  62. actions: {
  63. GenerateRoutes ({ commit }, data) {
  64. return new Promise(resolve => {
  65. const { roles } = data
  66. let accessedRouters
  67. if (roles.includes('admin')) {
  68. accessedRouters = asyncRouterMap || []
  69. } else {
  70. accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
  71. }
  72. commit('SET_ROUTERS', accessedRouters)
  73. resolve()
  74. })
  75. }
  76. }
  77. }
  78. export default permission