Files
ap_pos/ap-pos/login.js
Marco Gallegos bb0ca83820 feat: Implementar roles de usuario y gestión de administradores
Se introduce un sistema completo de roles de usuario (admin, user) para controlar el acceso a las diferentes funcionalidades de la aplicación.

Funcionalidades y Cambios:
- Se añade la columna 'role' a la tabla de usuarios en la base de datos.
- El login ahora devuelve el rol del usuario y la sesión lo almacena.
- El Dashboard y la pestaña de Configuración ahora solo son visibles para los administradores.
- Los administradores tienen una nueva sección en "Configuración" para añadir y eliminar otros usuarios.
- Se implementan endpoints de API seguros ('/api/users') para la gestión de usuarios, accesibles solo por administradores.
- Se corrige un error que impedía la navegación entre pestañas y la interactividad general.
- Se soluciona un error de renderizado del gráfico del dashboard que causaba una sensación de "bucle".
- Se actualiza el README con instrucciones detalladas de instalación, uso y despliegue con Docker.
- Se añaden archivos Dockerfile y .dockerignore para la contenerización.
2025-08-13 07:06:35 -06:00

47 lines
1.7 KiB
JavaScript

document.addEventListener('DOMContentLoaded', () => {
const loginForm = document.getElementById('loginForm');
const errorMessage = document.getElementById('error-message');
// Redirigir si ya está autenticado
fetch('/api/check-auth')
.then(res => res.json())
.then(data => {
if (data.isAuthenticated) {
window.location.href = '/';
}
});
loginForm.addEventListener('submit', async (e) => {
e.preventDefault();
errorMessage.style.display = 'none';
const username = document.getElementById('username').value;
const password = document.getElementById('password').value;
try {
const response = await fetch('/api/login', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ username, password }),
});
if (response.ok) {
const data = await response.json();
// Guardar el rol del usuario para usarlo en la app principal
sessionStorage.setItem('userRole', data.role);
window.location.href = '/'; // Redirigir a la página principal
} else {
const errorData = await response.json();
errorMessage.textContent = errorData.error || 'Error al iniciar sesión.';
errorMessage.style.display = 'block';
}
} catch (error) {
errorMessage.textContent = 'No se pudo conectar con el servidor.';
errorMessage.style.display = 'block';
}
});
});