permission.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. /**
  2. * @author chuzhixin 1204505056@qq.com (不想保留author可删除)
  3. * @description 路由守卫,目前两种模式:all模式与intelligence模式
  4. */
  5. import router from '@/router'
  6. import store from '@/store'
  7. import VabProgress from 'nprogress'
  8. import 'nprogress/nprogress.css'
  9. import getPageTitle from '@/utils/pageTitle'
  10. import {
  11. authentication,
  12. loginInterception,
  13. progressBar,
  14. recordRoute,
  15. routesWhiteList,
  16. } from './settings'
  17. VabProgress.configure({
  18. easing: 'ease',
  19. speed: 500,
  20. trickleSpeed: 200,
  21. showSpinner: false,
  22. })
  23. router.beforeResolve(async (to, from, next) => {
  24. if (progressBar) VabProgress.start()
  25. let hasToken = store.getters['user/accessToken']
  26. if (!loginInterception) hasToken = true
  27. if (hasToken) {
  28. if (to.path === '/login') {
  29. next({ path: '/' })
  30. if (progressBar) VabProgress.done()
  31. } else {
  32. const hasPermissions =
  33. store.getters['user/permissions'] &&
  34. store.getters['user/permissions'].length > 0
  35. if (hasPermissions) {
  36. next()
  37. } else {
  38. try {
  39. let permissions
  40. if (!loginInterception) {
  41. //settings.js loginInterception为false时,创建虚拟权限
  42. await store.dispatch('user/setPermissions', ['admin'])
  43. permissions = ['admin']
  44. } else {
  45. permissions = await store.dispatch('user/getUserInfo')
  46. }
  47. let accessRoutes = []
  48. if (authentication === 'intelligence') {
  49. accessRoutes = await store.dispatch('routes/setRoutes', permissions)
  50. } else if (authentication === 'all') {
  51. accessRoutes = await store.dispatch('routes/setAllRoutes')
  52. }
  53. router.addRoutes(accessRoutes)
  54. next({ ...to, replace: true })
  55. } catch {
  56. await store.dispatch('user/resetAccessToken')
  57. if (progressBar) VabProgress.done()
  58. }
  59. }
  60. }
  61. } else {
  62. if (routesWhiteList.indexOf(to.path) !== -1) {
  63. next()
  64. } else {
  65. if (recordRoute) {
  66. next(`/login?redirect=${to.path}`)
  67. } else {
  68. next('/login')
  69. }
  70. if (progressBar) VabProgress.done()
  71. }
  72. }
  73. document.title = getPageTitle(to.meta.title)
  74. })
  75. router.afterEach(() => {
  76. if (progressBar) VabProgress.done()
  77. })