33 lines
1.1 KiB
JavaScript
33 lines
1.1 KiB
JavaScript
import { showToast } from '@/plugins/toast'
|
|
import { setupLayouts } from 'virtual:generated-layouts'
|
|
import { createRouter, createWebHistory } from 'vue-router'
|
|
import routes from '~pages'
|
|
import { useAuthStore } from '../stores/auth'
|
|
|
|
const router = createRouter({
|
|
// https://stackoverflow.com/questions/74014240/laravel-vite-production-build-redirecting-to-build-path-in-url
|
|
history: createWebHistory(),
|
|
routes: [
|
|
...setupLayouts(routes),
|
|
],
|
|
})
|
|
|
|
router.beforeEach((to, from, next) => {
|
|
const authStore = useAuthStore()
|
|
|
|
if (to.meta?.requiresAuth && !authStore.isAuthenticated) {
|
|
// Arahkan ke rute login jika tidak terautentikasi
|
|
showToast("You are not logged in yet", "error")
|
|
next("/login")
|
|
} else if (to.meta?.allowedRoles && !to.meta.allowedRoles?.includes(authStore.role)) {
|
|
// Arahkan ke rute login jika role tidak sesuai
|
|
showToast("You don't have access to the page", "error")
|
|
next("/login")
|
|
} else {
|
|
next() // Lanjutkan navigasi
|
|
}
|
|
})
|
|
|
|
// Docs: https://router.vuejs.org/guide/advanced/navigation-guards.html#global-before-guards
|
|
export default router
|