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. 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. // const a = []
  38. function filterAsyncRouter (routerMap, roles) {
  39. const accessedRouters = routerMap.filter(route => {
  40. if (hasPermission(roles, route)) {
  41. if (route.children && route.children.length) {
  42. route.children = filterAsyncRouter(route.children, roles)
  43. }
  44. return true
  45. }
  46. return false
  47. })
  48. // a.push(...accessedRouters)
  49. return accessedRouters
  50. }
  51. const permission = {
  52. namespaced: true,
  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. GenerateRoutes ({ commit }, data) {
  65. return new Promise(resolve => {
  66. // const { roles } = data
  67. console.log('GenerateRoutesGenerateRoutesGenerateRoutes:', JSON.parse(JSON.stringify(asyncRouterMap)), data)
  68. const accessedRouters = filterAsyncRouter(asyncRouterMap, data)
  69. commit('SET_ROUTERS', accessedRouters)
  70. resolve(accessedRouters)
  71. })
  72. }
  73. }
  74. }
  75. export default permission