feat: RLS in ecto helpers #27
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
When using Ecto schemas with Supabase databases that have Row Level Security (RLS) policies enabled, there's no built-in way
to set PostgreSQL session variables (like
request.jwt.claims.sub) that RLS policies depend on for filtering data based onthe authenticated user context.
Solution
Added
Supabase.PostgREST.RLSmodule with helpers for setting RLS context in Ecto transactions:set_rls_context/3- Sets PostgreSQL session config variables transaction-scopedset_user_id/2,set_user_role/2- Convenience wrappers for common Supabase JWT claimsset_rls_claims/2- Batch set multiple claims at oncewith_user_context/3- Wraps operations in a transaction with automatic user contextRationale
Transaction-scoped session variables ensure RLS context is automatically cleaned up and doesn't leak between requests. The API
follows Supabase's standard JWT claims pattern (
request.jwt.claims.*) and integrates naturally with Ecto's transactionsystem. Made
ecto_sqlan optional dependency to keep the library lightweight for users not using Ecto.