index.js 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. import { defineRouter } from "#q-app/wrappers";
  2. import {
  3. createRouter,
  4. createMemoryHistory,
  5. createWebHistory,
  6. createWebHashHistory,
  7. } from "vue-router";
  8. import routes from "./routes";
  9. import { Notify } from "quasar";
  10. import { permissionStore } from "src/stores/permission";
  11. import { i18n } from "src/boot/i18n";
  12. import { userStore } from "src/stores/user";
  13. import { useAuth } from "src/composables/useAuth";
  14. const AUTH_ROUTES = [
  15. "LoginPage",
  16. "ForgotPasswordPage",
  17. "VerifyEmailPage",
  18. "VerifyCodePage",
  19. "ResetPasswordPage",
  20. "FirstAccessPage",
  21. "FirstAccessFormPage",
  22. ];
  23. const HOME_BY_TIPO = {
  24. administrador: "DashboardPage",
  25. associado: "CarteirinhaPage",
  26. parceiro: "ValidarCarteirinhaPage",
  27. };
  28. export default defineRouter(function () {
  29. const createHistory = process.env.SERVER
  30. ? createMemoryHistory
  31. : process.env.VUE_ROUTER_MODE === "history"
  32. ? createWebHistory
  33. : createWebHashHistory;
  34. const Router = createRouter({
  35. scrollBehavior: () => ({ left: 0, top: 0 }),
  36. routes,
  37. history: createHistory(process.env.VUE_ROUTER_BASE),
  38. });
  39. let refreshed = false;
  40. Router.beforeEach(async (to, from, next) => {
  41. const store = userStore();
  42. if (store.accessToken == null && !refreshed) {
  43. try {
  44. await useAuth().refresh();
  45. } catch {
  46. refreshed = true;
  47. if (!AUTH_ROUTES.includes(to.name)) {
  48. return next({ name: "LoginPage" });
  49. }
  50. return next();
  51. }
  52. }
  53. if (store.accessToken && AUTH_ROUTES.includes(to.name)) {
  54. const home = HOME_BY_TIPO[store.userTipo] ?? "HomePage";
  55. return next({ name: home });
  56. }
  57. if (to.meta.requireAuth && !store.accessToken) {
  58. return next({ name: "LoginPage" });
  59. }
  60. if (to.meta.requiredPermission) {
  61. const { getAccess } = permissionStore();
  62. if (!getAccess(to.meta.requiredPermission, "view")) {
  63. Notify.create({
  64. message: i18n.global.t("validation.permissions.view"),
  65. type: "negative",
  66. });
  67. return next(from);
  68. }
  69. }
  70. if (to.meta.allowedTypes?.length && store.userTipo) {
  71. if (!to.meta.allowedTypes.includes(store.userTipo)) {
  72. Notify.create({
  73. message: i18n.global.t("validation.permissions.view"),
  74. type: "negative",
  75. });
  76. return next({ name: "HomePage" });
  77. }
  78. }
  79. return next();
  80. });
  81. return Router;
  82. });