'error', 'message' => 'Inserire username e password']; echo json_encode($resp); exit; } // Autenticazione: descrizione = username/email, password = plain text // Recupera anche l'ultimo ruolo assegnato (permission) se presente $sql = "SELECT u.user_id, u.descrizione, r.id AS role_id, r.name AS role_name FROM `user` u LEFT JOIN `permission` p ON p.user_id = u.user_id LEFT JOIN `role` r ON r.id = p.role WHERE u.descrizione = ? AND u.password = ? ORDER BY p.data DESC LIMIT 1"; if ($stmt = mysqli_prepare($conn, $sql)) { mysqli_stmt_bind_param($stmt, 'ss', $username, $password); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); if ($result && mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); $roleId = $row['role_id'] ?? null; $roleName = $row['role_name'] ?? null; // Se non c'è permission, default a utente if (!$roleId || !$roleName) { $roleId = 3; // utente $roleName = 'utente'; } $_SESSION['user_id'] = (int)$row['user_id']; $_SESSION['username'] = $row['descrizione']; $_SESSION['role_id'] = (int)$roleId; $_SESSION['role_name'] = $roleName; $resp = ['status' => 'ok', 'role' => $roleName]; echo json_encode($resp); } else { $resp = ['status' => 'error', 'message' => 'Credenziali non valide']; echo json_encode($resp); } mysqli_stmt_close($stmt); } else { $resp = ['status' => 'error', 'message' => 'Errore interno']; echo json_encode($resp); } // Per richieste non AJAX, effettua redirect (compatibilità) if (!$isAjax) { if (isset($_SESSION['user_id'])) { header('Location: ../../index.php'); } else { header('Location: ../../index.php?login=failed'); } }