Files
tripz-llc/backend/Admin/v2/security/audit_logs.php
T
2026-08-09 16:56:13 +03:00

61 lines
2.4 KiB
PHP

<?php
// Admin/v2/security/audit_logs.php
// كان هنا تتبّع تشخيصي يكتب ملفاً نصياً على القرص مع كل طلب، ويسجّل فيه
// user_id والدور. أُزيل: يراكم ملفاً بلا حد في الإنتاج ويسرّب سياق الجلسة.
// ما يستحق التسجيل يذهب إلى error_log مع الأخطاء وحدها.
try {
require_once __DIR__ . '/../../../connect.php';
} catch (Exception $e) {
error_log('[audit_logs] bootstrap failed: ' . $e->getMessage());
http_response_code(500);
printFailure('loading failed', 500);
exit;
}
// ── فحص الصلاحيات ────────────────────────────────────────
if ($role !== 'super_admin' && $role !== 'admin') {
printFailure("Unauthorized. role=$role", 403);
}
try {
// استعلام لجلب السجلات مع محاولة جلب الاسم من جدول الموظفين أو جدول المشرفين
$stmt = $con->prepare("
SELECT
l.id, l.admin_id, l.action, l.table_name, l.record_id, l.details, l.created_at,
COALESCE(e.name, au.name) as admin_name_raw
FROM admin_audit_log l
LEFT JOIN employee e ON l.admin_id COLLATE utf8mb4_general_ci = e.id COLLATE utf8mb4_general_ci
LEFT JOIN adminUser au ON l.admin_id COLLATE utf8mb4_general_ci = au.id COLLATE utf8mb4_general_ci
OR l.admin_id COLLATE utf8mb4_general_ci = au.email COLLATE utf8mb4_general_ci
ORDER BY l.created_at DESC
LIMIT 100
");
$stmt->execute();
$logs = $stmt->fetchAll(PDO::FETCH_ASSOC);
// معالجة البيانات: فك تشفير الأسماء إذا كانت مشفرة
foreach ($logs as &$log) {
$rawName = $log['admin_name_raw'];
if (!empty($rawName)) {
// محاولة فك التشفير
$decrypted = $encryptionHelper->decryptData($rawName);
$log['admin_name'] = ($decrypted !== false) ? $decrypted : $rawName;
} else {
$log['admin_name'] = 'أدمن غير معروف';
}
unset($log['admin_name_raw']);
}
$count = count($logs);
jsonSuccess($logs);
} catch (Exception $e) {
error_log('[audit_logs] query failed: ' . $e->getMessage());
jsonError('Query failed', 500);
}
?>