For multi-tenant apps, RLS is enabled is not evidence that rows are isolated. The failure I keep looking for is simple: user A can read or mutate a row owned by tenant B through a permissive relationship or missing ownership condition.
I built a tiny red/green fixture around that exact case. The broken policy fails the cross-tenant assertion; the one-file fix passes the same test suite. It runs locally without a Supabase project, credentials, Docker, or production data:
https://github.com/cekuu35/supab...
My current minimum proof is: same-tenant access succeeds, cross-tenant read returns zero rows, cross-tenant write changes zero rows, and the assertions run under the application role rather than an admin role.
I built this after seeing teams treat “RLS enabled” as proof that tenant isolation works. It is not. A policy can pass happy-path checks while a relationship or ownership condition still exposes another tenant’s rows.
This repository makes the failure visible with one red/green fixture and the same test suite on both branches. You can inspect the SQL, reproduce the leak locally, and verify the minimal fix without sharing credentials.
If you find a pattern the fixture should cover, I’d genuinely like to hear it. For teams that want a second set of eyes, I also offer a fixed-scope 24-hour review of three sensitive tables. Launch offer: $15.20 total, $7.60 deposit today:
https://cengokurtoglu.gumroad.com/l/supabase-rls-3-table-review/LAUNCH20?utm_source=producthunt&utm_medium=maker_comment&utm_campaign=rls_review
Update: the fixed-scope review offer linked in my comment above has closed.
If you want to check your own RLS policies:
Free, 10 checks before production: cengokurtoglu.gumroad.com/l/nextjs-supabase-10-checks-free
- Full audit kit ($29, one-time) for the checks that need an outside read of your schema: cengokurtoglu.gumroad.com/l/supabase-rls-audit-kit
No pitch beyond that, just fixing a stale link.