Vista según el rol
La páginaconfiguracion.php determina el nivel de acceso mediante la variable $es_superusuario:
$es_superusuario es false, el contenedor recibe la clase CSS normal-user y todas las secciones marcadas con .superuser-only quedan ocultas. Los usuarios con rol Usuario solo ven las opciones que les corresponden.
A diferencia de
gestion_usuarios.php y auditoria_sistema.php, configuracion.php no redirige al usuario no-administrador — simplemente oculta las secciones restringidas mediante CSS.Secciones del panel (solo Administrador)
Gestión de usuarios
Acceso directo a
gestion_usuarios.php. Permite crear, editar y desactivar cuentas. Ver Gestión de usuarios.Auditoría del sistema
Acceso directo a
auditoria_sistema.php. Muestra el historial completo de actividad. Ver Auditoría del sistema.Copias de seguridad
Genera y descarga un volcado SQL completo de la base de datos
bienes_nacionales_uptag.Soporte técnico
Enlace de contacto directo al equipo de soporte del sistema.
Exportar base de datos
La sección Copias de Seguridad contiene un formulario con el botón Exportar Datos de la BD. Al hacer clic, se muestra un diálogo de confirmación en el navegador antes de proceder.Cómo funciona la exportación
Envío del formulario
El botón envía
POST con name="exportar_datos". El servidor detecta isset($_POST['exportar_datos']) al inicio de configuracion.php, antes de generar cualquier contenido HTML.Limpieza del buffer
Se ejecuta
ob_end_clean() para descartar el HTML parcial que ya estaba en el buffer de salida, dejando paso libre a los headers HTTP de descarga.Nombre del archivo
El nombre del archivo se construye con la fecha y hora del momento exacto de la exportación:
Generación del volcado SQL
El script itera sobre todas las tablas de la base de datos. Para cada tabla genera primero la sentencia
CREATE TABLE y luego todas las filas como sentencias INSERT INTO:Tablas incluidas en la exportación
El volcado abarca la totalidad de las tablas en el orden en queSHOW TABLES las devuelve:
| Tabla | Descripción |
|---|---|
usuarios | Cuentas de acceso al sistema |
categorias | Categorías de clasificación de bienes |
estatus | Estados posibles de un bien |
dependencias | Unidades organizativas de la universidad |
ubicaciones | Espacios físicos dentro de cada dependencia |
proveedores | Proveedores para compras |
donaciones | Registros de bienes donados |
adquisiciones | Órdenes de compra y facturas |
responsables | Custodios asignados a los bienes |
bienes | Inventario principal de bienes nacionales |
movimientos | Traslados, asignaciones y desincorporaciones |
control_perceptivo | Verificaciones físicas periódicas |
auditoria | Historial de actividad del sistema |
Perfil de usuario (perfil.php)
Todos los usuarios, independientemente del rol, pueden acceder a su perfil personal. La página perfil.php lee la cédula del usuario desde $_SESSION['usuario']['cedula'].
Información mostrada
| Campo | Fuente |
|---|---|
| Nombre completo | $_SESSION['usuario']['nombre'] + $_SESSION['usuario']['apellido'] |
| Cédula | $_SESSION['usuario']['cedula'] |
| Correo electrónico | Obtenido fresco desde SELECT email FROM usuarios WHERE cedula = ? |
| Rol | $_SESSION['usuario']['rol'] con badge de color (rojo para Administrador, verde para Usuario) |
| Estado | Siempre Activo (un usuario inactivo no puede tener sesión abierta) |
Cambiar correo electrónico
Haz clic en Cambiar Correo para mostrar el formulario inline (id="form-correo"). El formulario envía POST con accion=cambiar_correo.
Validaciones aplicadas:
- El campo
email_actualdebe coincidir exactamente con el email registrado en la BD. - El
nuevo_emailes validado confilter_var($nuevo_email, FILTER_VALIDATE_EMAIL). - Se verifica que ningún otro usuario tenga el nuevo email:
SELECT cedula FROM usuarios WHERE email = ? AND cedula != ?.
$_SESSION['usuario']['email'] = $nuevo_email) y se inserta un registro en la tabla auditoria.
Cambiar contraseña
Haz clic en Cambiar Contraseña para mostrar el formulario inline (id="form-contrasena"). El formulario envía POST con accion=cambiar_contrasena.
La contraseña nueva debe cumplir todos los siguientes requisitos (validados en servidor y visualizados en tiempo real en el cliente):
Longitud
Al menos 8 caracteres (
strlen($nueva_contrasena) >= 8).Mayúscula
Al menos una letra mayúscula (
preg_match('/[A-Z]/', $nueva_contrasena)).Minúscula
Al menos una letra minúscula (
preg_match('/[a-z]/', $nueva_contrasena)).Número
Al menos un dígito (
preg_match('/\d/', $nueva_contrasena)).Carácter especial
Al menos un carácter no alfanumérico (
preg_match('/[^A-Za-z0-9]/', $nueva_contrasena)).Confirmación
nueva_contrasena === confirmar_contrasena. El botón Actualizar Contraseña permanece deshabilitado hasta que todos los criterios se cumplen.password_hash($nueva_contrasena, PASSWORD_DEFAULT) y se ejecuta:
auditoria con datos_nuevos = '{"password":"cambiado"}' — el hash nunca se expone en la auditoría.