Kalau function guest mengembalikan donor_email_snapshot atau donor_phone_snapshot, itu terlalu lebar. Untuk halaman konfirmasi, donatur tidak perlu melihat ulang semua data kontak lewat jalur token publik.
Buat access matrix
Minta Antigravity membantu membuat dokumen:
text
docs/access-matrix.md
Isinya harus memetakan role dan operasi:
md
# Access Matrix — Platform Donasi Amanah| Role | Tabel/Fungsi | Operasi | Diizinkan? | Alasan ||---|---|---|---|---|| anon | campaigns | select published | ya | policy Published campaigns are public || anon | donors | insert | ya | policy Anyone can create donor || anon | donors | select | tidak | tidak ada select policy anon || anon | donations | insert pending | ya | policy Anyone can insert pending donation || anon | donations | select direct | tidak | tidak ada select policy anon || anon | get_donation_by_lookup | execute | ya, dengan token hash cocok | grant execute + filter lookup_token_hash || authenticated | donors | select own | ya | user_id = auth.uid() || authenticated | donations | select own | ya | user_id = auth.uid() || authenticated | donations milik user lain | select | tidak | user_id tidak cocok || admin | verifications | approve/reject | ya jika policy/guard admin ada | role admin + server guard |
Dokumen ini tidak menggantikan policy. Ia membuat policy mudah direview.
Prompt untuk Antigravity
text
Mulai dari AGENTS.md, DESIGN.md, dan docs/README.md.Tugas audit, jangan mengubah policy dulu.Baca:- supabase/migrations/20260829_vertical_slice.sql- migration upload/verifikasi/laporan jika sudah ada- src/app/donation/confirmation/[donationNumber]/page.tsx- docs/data-contract.mdTugas:1. Daftarkan policy RLS untuk donors, donations, payments, dan campaigns.2. Jelaskan role anon boleh apa dan tidak boleh apa.3. Jelaskan authenticated user boleh membaca data siapa.4. Jelaskan bagaimana guest confirmation bisa bekerja tanpa SELECT donations bebas.5. Periksa apakah function publik/agregat mengembalikan PII: nama, email, phone, token hash, idempotency key, proof_path.6. Tulis docs/access-matrix.md.7. Jika menemukan akses terlalu longgar, laporkan sebagai temuan; jangan memperbaiki tanpa instruksi.Untuk setiap kesimpulan, kutip policy/function yang menjadi bukti.
Audit ini sengaja “jangan mengubah dulu”. Kamu perlu memahami permukaan akses sebelum menambal.
sebagai guest tanpa token: confirmation harus 404;
sebagai guest dengan token salah: 404;
sebagai guest dengan token benar: detail terbatas tampil;
sebagai user A: hanya donasi user A tampil;
sebagai user B: donasi user A tidak tampil;
laporan publik hanya angka agregat, bukan baris donatur.
Jangan tertipu oleh UI yang menyembunyikan kolom
Kalau API/server sudah mengembalikan email, lalu UI tidak menampilkannya, data tetap bocor ke layer yang tidak perlu. Keamanan bukan “tidak terlihat di layar”. Keamanan adalah “tidak pernah diberikan kepada pihak yang tidak berhak”.
Karena itu, audit function dan query return shape sama pentingnya dengan audit tampilan.
Prinsip yang perlu dibawa
Privasi harus punya bukti.
Bukti minimal:
text
RLS aktifpolicy spesifikfunction return sempituji role anon/user A/user Bdokumen access matrix cocok dengan policy nyata
Kalau tidak bisa diuji, jangan tulis “aman”. Tulis “belum diverifikasi”.
Checkpoint
docs/access-matrix.md ada.
RLS aktif di tabel sensitif.
Anon tidak bisa SELECT donors/donations langsung.
Authenticated user hanya membaca data miliknya.
Guest confirmation bekerja lewat token hash, bukan SELECT bebas.
Function publik/agregat tidak mengembalikan PII yang tidak perlu.
Hasil access matrix cocok dengan policy nyata.
Module ini menutup bagian amanah data: bukti transfer dijaga, keputusan verifikasi punya pagar, laporan publik jujur, dan privasi donatur diuji sebagai aturan, bukan janji. Setelah ini, pekerjaan bergeser ke rilis: audit pra-launch, SOP, dan kebiasaan kerja pribadi agar project tidak hanya selesai di lokal.
Checkpoint KuisTarget: 70%
Kuis 05.4 — RLS & Keamanan Data Donatur
Kuis ini wajib untuk sertifikat. Kamu tetap bisa lanjut ke pelajaran berikutnya dan mengerjakannya nanti.