sip_huellas/frontend/src/router/index.js

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;