permission.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. import router from './router'
  2. import store from './store'
  3. import NProgress from 'nprogress'
  4. import 'nprogress/nprogress.css'
  5. import { getToken, removeAll, removeToken } from '@/utils/auth'
  6. import getPageTitle from '@/utils/get-page-title'
  7. NProgress.configure({ showSpinner: false })
  8. // 白名单
  9. const whiteList = ['/login']
  10. router.beforeEach(async(to, from, next) => {
  11. NProgress.start()
  12. document.title = getPageTitle(to.meta.title)
  13. const hasToken = getToken()
  14. if (hasToken) {
  15. if (to.path === '/login') {
  16. next()
  17. removeToken()
  18. NProgress.done()
  19. } else {
  20. // if (to.matched.length === 0) {
  21. // next('/404')
  22. // NProgress.done()
  23. // }
  24. const hasRoles = store.getters.roles && store.getters.roles.length > 0
  25. if (hasRoles) {
  26. next()
  27. } else {
  28. try {
  29. // 获取用户角色信息
  30. const { userId, roleList } = await store.dispatch('user/getInfo')
  31. // 用户未分配角色
  32. if (!roleList.length) {
  33. removeAll()
  34. router.push('/login')
  35. return
  36. }
  37. // 路由权限配置
  38. const accessRoutes = await store.dispatch('permission/GenerateRoutes', userId)
  39. // 路由添加
  40. router.addRoutes(accessRoutes)
  41. // 循环判断角色
  42. next({ ...to, replace: true })
  43. } catch (error) {
  44. console.log(error)
  45. await store.dispatch('user/resetToken')
  46. next(`/login?redirect=${to.fullPath}`)
  47. NProgress.done()
  48. }
  49. }
  50. }
  51. } else {
  52. if (whiteList.indexOf(to.path) !== -1) {
  53. next()
  54. } else {
  55. next(`/login?redirect=${to.fullPath}`)
  56. NProgress.done()
  57. }
  58. }
  59. })
  60. router.afterEach(() => {
  61. NProgress.done()
  62. })