Нет описания

permission.js 1.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import { asyncRouterMap, constantRouterMap } from '@/router/index'
  2. /**
  3. * 通过meta.role判断是否与当前用户权限匹配
  4. * @param roles
  5. * @param route
  6. */
  7. function hasPermission(roles, route) {
  8. if (route.meta && route.meta.role) {
  9. return roles.some(role => route.meta.role.indexOf(role) >= 0)
  10. } else {
  11. return true
  12. }
  13. }
  14. /**
  15. * 递归过滤异步路由表,返回符合用户角色权限的路由表
  16. * @param asyncRouterMap
  17. * @param roles
  18. */
  19. function filterAsyncRouter(asyncRouterMap, roles) {
  20. const accessedRouters = asyncRouterMap.filter(route => {
  21. if (hasPermission(roles, route)) {
  22. if (route.children && route.children.length) {
  23. route.children = filterAsyncRouter(route.children, roles)
  24. }
  25. return true
  26. }
  27. return false
  28. })
  29. return accessedRouters
  30. }
  31. const permission = {
  32. state: {
  33. routers: constantRouterMap,
  34. addRouters: []
  35. },
  36. mutations: {
  37. SET_ROUTERS: (state, routers) => {
  38. state.addRouters = routers
  39. state.routers = constantRouterMap.concat(routers)
  40. }
  41. },
  42. actions: {
  43. GenerateRoutes({ commit }, data) {
  44. return new Promise(resolve => {
  45. const { roles } = data
  46. let accessedRouters
  47. if (roles.indexOf('admin') >= 0) {
  48. accessedRouters = asyncRouterMap
  49. } else {
  50. accessedRouters = filterAsyncRouter(asyncRouterMap, roles)
  51. }
  52. commit('SET_ROUTERS', accessedRouters)
  53. resolve()
  54. })
  55. }
  56. }
  57. }
  58. export default permission