Skip to content

Audit Log

Catatan otomatis perubahan dan kejadian penting di sistem.

Apa itu Audit Log?

Setiap aksi sensitif (login, perubahan role, verifikasi pembayaran, transfer kamar, soft-delete kontrak) tercatat otomatis di tabel audit_logs. Ini adalah jejak forensik untuk investigasi jika terjadi insiden atau perselisihan.

Apa Saja yang Dicatat

  • Auth events: login (auth.login), logout (auth.logout), signup (auth.signup).
  • Perubahan role: ketika admin mengubah role pengguna lain (auth.role_change) — termasuk role lama, role baru, dan target user.
  • Aksi admin pembayaran: verifikasi (admin.payment.verify) dan tolak (admin.payment.reject).
  • Aksi admin kontrak: transfer kamar (admin.contract.transfer) dan soft-delete (admin.contract.soft_delete).
  • Update penghuni: (admin.tenant.update).

Setiap baris menyimpan:

KolomIsi
user_idID akun yang melakukan aksi
event_typeJenis kejadian (mis. admin.payment.verify)
ip_addressIP klien
user_agentBrowser / device
metadataDetail spesifik kejadian (JSON)
created_atWaktu kejadian

Siapa yang Bisa Lihat

Hanya admin dan super_admin yang bisa membaca tabel audit_logs. Role owner, tenant, dan viewer tidak bisa mengakses sama sekali. Penegakan ini di-enforce di level database (RLS) — bukan hanya UI.

Cara Admin Memakai

Saat ini belum ada UI khusus untuk audit log di admin panel. Untuk audit:

  1. Mintalah developer/super_admin menjalankan query SQL filter berdasarkan kebutuhan (per user, per event type, per rentang waktu).
  2. Hasil bisa diekspor ke CSV untuk laporan.

Contoh kebutuhan audit umum:

  • "Siapa yang ubah role user X?" → filter event_type = 'auth.role_change'.
  • "Siapa yang verifikasi pembayaran Y?" → filter event_type = 'admin.payment.verify' dan metadata->>'payment_id' = '...'.
  • "Apa saja yang admin Z lakukan minggu lalu?" → filter user_id = '...'.

⚠️ Penting: Audit log bersifat read-only. Jangan pernah hapus baris manual — ini adalah jejak forensik yang wajib utuh untuk investigasi insiden.

⚠️ Penting: Tidak semua perubahan data tercatat di audit log. Perubahan field biasa (edit kontrak, edit kamar) tidak tercatat per-field. Untuk recovery data, gunakan point-in-time recovery Supabase, bukan audit log.

💡 Tip: audit_logs saat ini tidak punya retensi otomatis (tidak ada penghapusan). Setelah 12 bulan, mintalah developer arsipkan ke storage dingin agar tabel tidak membengkak.

GrahaKost v2 — Confidential Client Documentation