permission.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. import { asyncRouterMap, constantRouterMap } from '@/config/router.config'
  2. /**
  3. * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除
  4. * @param permission
  5. * @param route
  6. * @returns {boolean}
  7. */
  8. function hasPermission (permission, route) {
  9. if (route.meta && route.meta.permission) {
  10. let flag = false
  11. for (let i = 0, len = permission.length; i < len; i++) {
  12. flag = route.meta.permission.includes(permission[i])
  13. if (flag) {
  14. return true
  15. }
  16. }
  17. return false
  18. }
  19. return true
  20. }
  21. /**
  22. * 单账户多角色时,使用该方法可过滤角色不存在的菜单
  23. * @param roles
  24. * @param route
  25. * @returns {*}
  26. */
  27. // eslint-disable-next-line
  28. function hasRole (roles, route) {
  29. if (route.meta && route.meta.roles) {
  30. return route.meta.roles.includes(roles.id)
  31. } else {
  32. return true
  33. }
  34. }
  35. /**
  36. * 递归过滤菜单权限
  37. * @param {*} routerMap
  38. * @param {*} roles
  39. */
  40. // eslint-disable-next-line
  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. GenerateRoutes ({ commit }, data) {
  66. return new Promise(resolve => {
  67. // 此处屏蔽权限控制
  68. // const { roles } = data
  69. // const accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
  70. // 改写直接使用路由配置
  71. const accessedRouters = asyncRouterMap
  72. commit('SET_ROUTERS', accessedRouters)
  73. resolve(accessedRouters)
  74. })
  75. }
  76. }
  77. }
  78. export default permission