diff --git a/public/admin/usuarios.php b/public/admin/usuarios.php index ef18572..a7e330a 100755 --- a/public/admin/usuarios.php +++ b/public/admin/usuarios.php @@ -9,7 +9,7 @@ require_once BASE_PATH . '/src/CSRF.php'; require_once BASE_PATH . '/src/Session.php'; $auth = new Auth(); -$auth->requireAdmin(); +$auth->requireCoordinador(); $userModel = new User(); $message = ''; @@ -50,14 +50,28 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { $username = trim($_POST['username'] ?? ''); $password = $_POST['password'] ?? ''; $rol = $_POST['rol'] ?? 'ayudante'; - - if (empty($nombre) || empty($email)) { + + // Obtener usuario actual para verificar su rol + $usuarioActual = $userModel->getById($id); + + // Prevenir que coordinadores editen administradores + if ($usuarioActual && $usuarioActual['rol'] === 'admin' && !$auth->isAdmin()) { + $message = 'No tienes permisos para editar administradores'; + $messageType = 'danger'; + } + // Solo los administradores pueden asignar rol de administrador + elseif ($rol === 'admin' && !$auth->isAdmin()) { + $rol = 'coordinador'; + } + elseif (empty($nombre) || empty($email)) { $message = 'Nombre y email son obligatorios'; $messageType = 'danger'; - } elseif ($userModel->usernameExists($username, $id)) { + } + elseif ($userModel->usernameExists($username, $id)) { $message = 'El username ya está en uso'; $messageType = 'danger'; - } else { + } + else { $userModel->update($id, compact('nombre', 'email', 'username', 'password', 'rol')); $message = 'Usuario actualizado exitosamente'; $messageType = 'success'; @@ -65,20 +79,39 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } elseif ($action === 'toggle') { $id = $_POST['id'] ?? 0; $user = $userModel->getById($id); - if ($user) { - if ($user['activo']) { - $userModel->deactivate($id); - } else { - $userModel->activate($id); + + // Prevenir que coordinadores desactiven administradores + if ($user && $user['rol'] === 'admin' && !$auth->isAdmin()) { + $message = 'No tienes permisos para modificar administradores'; + $messageType = 'danger'; + } + elseif ($user && $user['id'] == Session::get('user_id')) { + $message = 'No puedes desactivar tu propio usuario'; + $messageType = 'danger'; + } + else { + if ($user) { + if ($user['activo']) { + $userModel->deactivate($id); + } else { + $userModel->activate($id); + } + $message = 'Estado actualizado'; + $messageType = 'success'; } - $message = 'Estado actualizado'; - $messageType = 'success'; } } } } $users = $userModel->getAll(true); + +// Filtrar administradores para coordinadores +if ($auth->isCoordinador() && !$auth->isAdmin()) { + $users = array_filter($users, function($user) { + return $user['rol'] !== 'admin'; + }); +} $currentPage = 'usuarios'; $pageTitle = 'Gestión de Usuarios'; ?> @@ -126,8 +159,19 @@ $pageTitle = 'Gestión de Usuarios';