permission.js 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  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. // for (let i = 0, len = permission.length; i < len; i++) {
  13. // flag = route.meta.permission.includes(permission[i])
  14. // if (flag) {
  15. // return true
  16. // }
  17. // }
  18. // return false
  19. // }
  20. return true
  21. }
  22. /**
  23. * 单账户多角色时,使用该方法可过滤角色不存在的菜单
  24. *
  25. * @param roles
  26. * @param route
  27. * @returns {*}
  28. */
  29. // eslint-disable-next-line
  30. function hasRole(roles, route) {
  31. if (route.meta && route.meta.roles) {
  32. return route.meta.roles.includes(roles.id)
  33. } else {
  34. return true
  35. }
  36. }
  37. function filterAsyncRouter (routerMap, roles) {
  38. const accessedRouters = routerMap.filter(route => {
  39. if (hasPermission(roles.permissionList, route)) {
  40. if (route.children && route.children.length) {
  41. route.children = filterAsyncRouter(route.children, roles)
  42. }
  43. return true
  44. }
  45. return false
  46. })
  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. }
  59. },
  60. actions: {
  61. GenerateRoutes ({ commit }, data) {
  62. return new Promise(resolve => {
  63. const { roles } = data
  64. const accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
  65. // console.log('动态获取到的菜单列表:'+JSON.stringify(accessedRouters))
  66. commit('SET_ROUTERS', accessedRouters)
  67. resolve()
  68. })
  69. }
  70. }
  71. }
  72. export default permission