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;