permission.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. import { asyncRouterMap, constantRouterMap } from '@/router'
  2. /**
  3. * 通过meta.role判断是否与当前用户权限匹配
  4. * @param roles
  5. * @param route
  6. */
  7. function hasPermission(roles, route) {
  8. debugger
  9. if (route.meta && route.meta.roles) {
  10. return roles.some(role => route.meta.roles.indexOf(role) >= 0)
  11. } else {
  12. return true
  13. }
  14. }
  15. /**
  16. * 递归过滤异步路由表,返回符合用户角色权限的路由表
  17. * @param asyncRouterMap
  18. * @param roles
  19. */
  20. function filterAsyncRouter(asyncRouterMap, roles) { // 闭包查找所有该roles下的路由
  21. debugger
  22. const accessedRouters = asyncRouterMap.filter(route => {
  23. if (hasPermission(roles, route)) {
  24. if (route.children && route.children.length) {
  25. route.children = filterAsyncRouter(route.children, roles)
  26. }
  27. return true
  28. }
  29. return false
  30. })
  31. return accessedRouters
  32. }
  33. const permission = {
  34. state: {
  35. routers: constantRouterMap,
  36. addRouters: []
  37. },
  38. mutations: {
  39. SET_ROUTERS: (state, routers) => {
  40. state.addRouters = routers
  41. state.routers = constantRouterMap.concat(routers)
  42. console.log('state.routers', state.routers)
  43. }
  44. },
  45. actions: {
  46. GenerateRoutes({ commit }, data) {
  47. return new Promise(resolve => {
  48. const { roles } = data
  49. debugger
  50. let accessedRouters
  51. if (roles.indexOf('3') >= 0) { // 如果是admin 直接加载所有路由 超级管理员
  52. accessedRouters = asyncRouterMap
  53. // debugger
  54. } else {
  55. accessedRouters = filterAsyncRouter(asyncRouterMap, roles) // 否则根据权限搜索路由
  56. // accessedRouters = ''
  57. // accessedRouters = asyncRouterMap
  58. }
  59. console.log('accessedRouters', accessedRouters)
  60. commit('SET_ROUTERS', accessedRouters)
  61. resolve()
  62. })
  63. }
  64. }
  65. }
  66. export default permission