I found this guide easy to follow and following this pattern suits my requirements.
It is working when testing manually using the web app though not when using pgTap tests.
I don't think I'm mocking
user_role
user_role
correctly using
set local request.jwt.user_role = 'driver';
set local request.jwt.user_role = 'driver';
Is this not the same as
auth.jwt() ->> 'user_role'
auth.jwt() ->> 'user_role'
that I reversed engineered from the
public.authorize
public.authorize
function.
-- as User 1set local role authenticated;set local request.jwt.claim.sub = '123e4567-e89b-12d3-a456-426614174000';set local request.jwt.user_role = 'driver'; --this is not correctselect is((select (auth.jwt() ->> 'user_role')::public.app_role), 'driver'::public.app_role);select is((select public.authorize('profiles.mine.read')), true, 'driver can read own profile');
-- as User 1set local role authenticated;set local request.jwt.claim.sub = '123e4567-e89b-12d3-a456-426614174000';set local request.jwt.user_role = 'driver'; --this is not correctselect is((select (auth.jwt() ->> 'user_role')::public.app_role), 'driver'::public.app_role);select is((select public.authorize('profiles.mine.read')), true, 'driver can read own profile');
Supabase gives you the tools, documentation, and community that makes managing databases, authentication, and backend infrastructure a lot less overwhelming.