← Kembali ke artikel

Tips Debug RLS Supabase yang Sering Bikin Pusing

Muhammad Rifqi

29 September 2026

Tips Debug RLS Supabase yang Sering Bikin Pusing

Query kamu benar, tapi hasilnya kosong. Sembilan dari sepuluh kali penyebabnya RLS.

RLS bekerja seperti yang seharusnya: diam. Query tidak error, ia hanya mengembalikan nol baris. Itu yang membuatnya sulit dilacak.

Menguji sebagai pengguna nyata

Jangan menguji sebagai postgres — role itu melewati RLS. Uji dengan role aplikasi:

set role authenticated;
set request.jwt.claims = '{"sub":"<user-uuid>"}';
select * from posts;
reset role;

Kebiasaan yang membantu

  1. Jalankan select * from pg_policies where tablename = 'posts'; dan baca ulang predikatnya, jangan hanya namanya.
  2. Tulis satu policy per operasi. FOR ALL USING (...) sering bocor karena bagian WITH CHECK-nya lupa diisi.
  3. Ingat grant tabel. RLS tidak berguna kalau role-nya memang belum punya SELECT. Dua lapis ini harus benar keduanya.
  4. Kolom sensitif bisa dicabut. revoke select (email) on users from anon membuat select \* dijawab error — dan itu memang tujuannya.

Kesimpulan

RLS bukan penghalang; ia hanya tidak memberi tahu kenapa query-mu kosong. Biasakan menguji dengan role yang sama seperti pengguna, dan sebagian besar kebingungan ini hilang.