Appearance
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:
| Kolom | Isi |
|---|---|
user_id | ID akun yang melakukan aksi |
event_type | Jenis kejadian (mis. admin.payment.verify) |
ip_address | IP klien |
user_agent | Browser / device |
metadata | Detail spesifik kejadian (JSON) |
created_at | Waktu 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:
- Mintalah developer/super_admin menjalankan query SQL filter berdasarkan kebutuhan (per user, per event type, per rentang waktu).
- 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'danmetadata->>'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_logssaat ini tidak punya retensi otomatis (tidak ada penghapusan). Setelah 12 bulan, mintalah developer arsipkan ke storage dingin agar tabel tidak membengkak.
