permission.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import { asyncRoutes, constantRoutes } from '@/router/index1'
  2. /**
  3. * Use meta.role to determine if the current user has permission
  4. * @param roles
  5. * @param route
  6. */
  7. function hasPermission(roles, route) {
  8. if (route.meta && route.meta.roles) {
  9. return roles.some(role => route.meta.roles.includes(role))
  10. } else {
  11. // if()
  12. if (roles == 'colleague') {
  13. return false
  14. } else {
  15. return true
  16. }
  17. }
  18. }
  19. /**
  20. * Filter asynchronous routing tables by recursion
  21. * @param routes asyncRoutes
  22. * @param roles
  23. */
  24. export function filterAsyncRoutes(routes, roles) {
  25. const res = []
  26. routes.forEach(route => {
  27. const tmp = { ...route }
  28. if (hasPermission(roles, tmp)) {
  29. if (tmp.children) {
  30. tmp.children = filterAsyncRoutes(tmp.children, roles)
  31. }
  32. res.push(tmp)
  33. }
  34. })
  35. return res
  36. }
  37. const state = {
  38. routes: [],
  39. addRoutes: []
  40. }
  41. const mutations = {
  42. SET_ROUTES: (state, routes) => {
  43. state.addRoutes = routes
  44. state.routes = constantRoutes.concat(routes)
  45. }
  46. }
  47. const actions = {
  48. generateRoutes({ commit }, roles) {
  49. return new Promise(resolve => {
  50. let accessedRoutes
  51. if (roles.includes('admin')) {
  52. accessedRoutes = asyncRoutes || []
  53. } else {
  54. accessedRoutes = filterAsyncRoutes(asyncRoutes, roles)
  55. }
  56. commit('SET_ROUTES', accessedRoutes)
  57. resolve(accessedRoutes)
  58. })
  59. }
  60. }
  61. export default {
  62. namespaced: true,
  63. state,
  64. mutations,
  65. actions
  66. }