Skip to main content
Esta página es de acceso restringido. El sistema verifica $_SESSION['usuario']['rol'] === 'Administrador' en cada carga. Si el rol no coincide, se ejecuta header("Location: index.php") y la sesión es redirigida de inmediato.

Acceder a gestión de usuarios

Desde el menú lateral, navega a Configuración (visible únicamente para administradores) y luego haz clic en el botón Gestionar de la sección Gestión de Usuarios. Esto carga gestion_usuarios.php.

Lista de usuarios

Al abrir la página, la función obtenerUsuarios() consulta la tabla usuarios y muestra todos los registros en una tabla con las siguientes columnas:
ColumnaCampo en BDNotas
CédulacedulaClave primaria, varchar(20)
Nombre completonombres + apellidosConcatenados con espacio
Emailemailvarchar(100)
Rolrolenum('Administrador','Usuario')
EstadoactivoMuestra badge verde Activo o rojo Inactivo
AcciónEnlace a edición del registro
El código detecta automáticamente los nombres de columna reales con SHOW COLUMNS FROM usuarios antes de ejecutar cualquier consulta. Esto hace que la página tolere variaciones de esquema.

Estructura de la tabla usuarios

CREATE TABLE `usuarios` (
  `cedula`              varchar(20)  NOT NULL,
  `password_hash`       varchar(255) NOT NULL,
  `nombres`             varchar(100) NOT NULL,
  `apellidos`           varchar(100) NOT NULL,
  `email`               varchar(100) DEFAULT NULL,
  `rol`                 enum('Administrador','Usuario') NOT NULL,
  `activo`              tinyint(1)   DEFAULT 1,
  `ultimo_acceso`       timestamp    NULL DEFAULT NULL,
  `fecha_creacion`      timestamp    NOT NULL DEFAULT current_timestamp(),
  `fecha_actualizacion` timestamp    NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
  PRIMARY KEY (`cedula`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

Crear un nuevo usuario

Haz clic en Crear Nuevo Usuario para cargar el formulario (?accion=crear). El formulario envía POST con accion=crear.
1

Completa los campos requeridos

Todos los campos marcados con asterisco son obligatorios.

Cédula

Campo cedula. Entre 7 y 8 dígitos. Debe ser único — el sistema ejecuta un SELECT previo y lanza una excepción si ya existe.

Nombre(s)

Campo nombre del formulario, guardado en la columna nombres. Obligatorio.

Apellido(s)

Campo apellido del formulario, guardado en apellidos. Opcional pero recomendado.

Correo electrónico

Campo email. Validado con filter_var($email, FILTER_VALIDATE_EMAIL). Obligatorio.

Rol

Selector entre Administrador y Usuario. Obligatorio. Corresponde al enum de la BD.

Contraseña

Campo clave. Mínimo 8 caracteres. Nunca se almacena en texto plano — se aplica password_hash($clave, PASSWORD_DEFAULT) antes del INSERT.
2

Estado del usuario

El checkbox Activo (name="activo") viene marcado por defecto. Si se deja marcado, el valor insertado en activo es 1; si se desmarca, es 0.
3

Envía el formulario

Al hacer clic en Crear Usuario, el servidor ejecuta las validaciones. Si hay errores, se muestran en un bloque alert-danger. Si todo es correcto, se inserta el registro y aparece el mensaje “Usuario creado exitosamente.”

Validaciones del servidor al crear

// Cédula única
$sql_check = "SELECT {$col_cedula} FROM usuarios WHERE {$col_cedula} = ?";
// ... si num_rows > 0 → throw new Exception("Ya existe un usuario con esta cédula.")

// Email
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    $errores[] = "El formato del correo electrónico es inválido.";
}

// Contraseña
if (strlen($clave) < 8) {
    $errores[] = "La contraseña debe tener al menos 8 caracteres.";
}

// Hash antes del INSERT
$hash_clave = password_hash($clave, PASSWORD_DEFAULT);
La contraseña no puede recuperarse una vez almacenada porque password_hash es irreversible. El formulario de edición de gestion_usuarios.php no incluye un campo de cambio de contraseña. Si un usuario olvida su contraseña, puede usar el flujo de recuperación en recuperar_contraseña.php (enlace en la página de login) o cambiarla desde su propio perfil en perfil.php.

Editar un usuario existente

Haz clic en Editar en la fila correspondiente. El sistema carga ?accion=editar&cedula={cedula} y recupera el registro mediante una consulta preparada.

Campos editables

  • nombres — Nombre(s)
  • apellidos — Apellido(s)
  • email — Correo electrónico
  • rol — Administrador / Usuario
  • activo — Estado activo/inactivo

Campos no editables

Cédula — El campo se renderiza como readonly y el valor real se pasa en un input oculto cedula_actual. La cédula nunca puede modificarse desde esta interfaz.
El formulario envía POST con accion=actualizar. El servidor ejecuta:
$sql_update = "UPDATE usuarios SET " . implode(", ", $sets) . " WHERE {$col_cedula} = ?";
Las mismas validaciones de email y rol se aplican también en la actualización.
El cambio de contraseña no está disponible en el formulario de edición de gestion_usuarios.php. Solo el propio usuario puede cambiar su contraseña desde Perfil (perfil.php).

Roles del sistema

Administrador

Acceso completo al sistema. Puede gestionar usuarios, ver la auditoría, exportar la base de datos y acceder a todas las funciones de configuración. La variable $es_superusuario queda en true.

Usuario

Acceso a las funciones operativas del inventario (registrar bienes, movimientos, reportes). No puede acceder a gestion_usuarios.php, auditoria_sistema.php ni a las secciones administrativas de configuracion.php.

Preguntas frecuentes

El formulario de gestión de usuarios no incluye un botón de eliminación. La práctica recomendada es desactivar el usuario estableciendo activo = 0 mediante el checkbox de estado en el formulario de edición.
La cédula es la clave primaria (PRIMARY KEY) de la tabla usuarios y es referenciada como clave foránea en otras tablas (por ejemplo, movimientos.usuario_registro y auditoria.usuario_cedula). Cambiarla rompería la integridad referencial.
El proceso de login verifica el campo activo. Un usuario con activo = 0 no puede autenticarse y el intento queda registrado en la tabla auditoria.
Al crear el usuario, el administrador define la contraseña en el campo clave. El sistema la hashea con password_hash($clave, PASSWORD_DEFAULT) y la guarda en password_hash. El usuario debe cambiarla desde su perfil en el primer acceso.

Build docs developers (and LLMs) love