permission.js 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. /**
  2. * @copyright chuzhixin 1204505056@qq.com
  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(
  50. "routes/setRoutes",
  51. permissions
  52. );
  53. } else if (authentication === "all") {
  54. accessRoutes = await store.dispatch("routes/setAllRoutes");
  55. }
  56. router.addRoutes(accessRoutes);
  57. next({ ...to, replace: true });
  58. } catch {
  59. await store.dispatch("user/resetAccessToken");
  60. if (progressBar) VabProgress.done();
  61. }
  62. }
  63. }
  64. } else {
  65. if (routesWhiteList.indexOf(to.path) !== -1) {
  66. next();
  67. } else {
  68. if (recordRoute) {
  69. next(`/login?redirect=${to.path}`);
  70. } else {
  71. next("/login");
  72. }
  73. if (progressBar) VabProgress.done();
  74. }
  75. }
  76. document.title = getPageTitle(to.meta.title);
  77. });
  78. router.afterEach(() => {
  79. if (progressBar) VabProgress.done();
  80. });