78 lines
1.8 KiB
JavaScript
78 lines
1.8 KiB
JavaScript
import { createRouter, createWebHistory } from 'vue-router';
|
|
import Dashboard from '../views/Dashboard.vue';
|
|
|
|
// Módulo AUTH: Login y Register
|
|
import Login from '../views/auth/Login.vue';
|
|
import Register from '../views/auth/Register.vue'; // Si decidís usar el registro visual
|
|
import Huellas from '../views/Huellas.vue';
|
|
import Informes from '../views/Informes.vue';
|
|
// Módulo USER: Gestión y CRUD
|
|
import UsersCrud from '../views/user/UsersCrud.vue';
|
|
|
|
const routes = [
|
|
{
|
|
path: '/login',
|
|
name: 'Login',
|
|
component: Login,
|
|
meta: { guest: true }
|
|
},
|
|
{
|
|
path: '/register',
|
|
name: 'Register',
|
|
component: Register,
|
|
meta: { guest: true } // Permite acceso solo a usuarios no autenticados
|
|
},
|
|
{
|
|
path: '/',
|
|
name: 'Dashboard',
|
|
component: Dashboard,
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/admin/usuarios',
|
|
name: 'UsersCrud',
|
|
component: UsersCrud,
|
|
meta: { requiresAuth: true, requiresAdmin: true }
|
|
},
|
|
// rutas registradas y protegidas por token
|
|
{
|
|
path: '/huellas',
|
|
name: 'Huellas',
|
|
component: Huellas,
|
|
meta: { requiresAuth: true }
|
|
},
|
|
{
|
|
path: '/informes',
|
|
name: 'Informes',
|
|
component: Informes,
|
|
meta: { requiresAuth: true }
|
|
}
|
|
];
|
|
|
|
const router = createRouter({
|
|
history: createWebHistory(),
|
|
routes,
|
|
});
|
|
|
|
// Guardia de Navegación Global (Middleware)
|
|
router.beforeEach((to, from, next) => {
|
|
const isAuthenticated = !!localStorage.getItem('token');
|
|
const user = JSON.parse(localStorage.getItem('user') || '{}');
|
|
const isAdmin = user.role === 'admin';
|
|
|
|
if (to.meta.requiresAuth && !isAuthenticated) {
|
|
return next({ name: 'Login' });
|
|
}
|
|
|
|
if (to.meta.guest && isAuthenticated) {
|
|
return next({ name: 'Dashboard' });
|
|
}
|
|
|
|
if (to.meta.requiresAdmin && !isAdmin) {
|
|
return next({ name: 'Dashboard' });
|
|
}
|
|
|
|
next();
|
|
});
|
|
|
|
export default router; |