Search K
Appearance
Appearance
Supabase wijziging
Klaar. Staan in Repo-root SUPABASE_GRANTS_PLAN.md Drie wijzigingen:
.context/plans/supabase-grants.md — portable kopie van het plan, reist mee met de repo.supabase/migrations/TEMPLATE.sql.example — sjabloon met de juiste volgorde (create → grants → RLS → policies) en commentaar dat uitlegt waarom.CLAUDE.md — nieuwe sectie ## Supabase migraties zodat toekomstige AI-sessies de conventie automatisch oppikken.Geen functionele code-wijzigingen, dus niets te testen. Op een andere computer pak je dit op door dezelfde branch te checken en zo nodig naar .context/plans/supabase-grants.md te verwijzen.
Claude.md:
Vanaf 30 oktober 2026 verleent Supabase geen impliciete grants meer op nieuwe tabellen in het public schema. Voor elke nieuwe tabel in supabase/migrations/ moet de migratie de volgorde create table → grants → enable RLS → policies volgen. Zonder expliciete grant-statements is de tabel onbereikbaar via de Data API (supabase-js .from(...)).
Zie supabase/migrations/TEMPLATE.sql.example voor het sjabloon. Bestaande tabellen behouden hun impliciete grants en hoeven niet retro-actief te worden bijgewerkt.
-- Template voor nieuwe tabellen in het public schema.
--
-- Volgorde: create table -> grants -> RLS enable -> policies.
--
-- Waarom de grants? Vanaf 30 okt 2026 verleent Supabase geen impliciete grants
-- meer op nieuwe tabellen in het public schema. Zonder de grant-statements
-- hieronder is de tabel niet bereikbaar via de Data API (supabase-js
-- .from(...) / REST / GraphQL) en krijg je PostgREST error 42501
-- "permission denied for table ...".
--
-- Bestaande tabellen in dit project behouden hun impliciete grants en hoeven
-- niet retro-actief te worden bijgewerkt.
--
-- Dit bestand wordt NIET door de Supabase CLI uitgevoerd (extensie .example).
-- Kopieer de inhoud naar een nieuwe migratie met de juiste timestamp-naam.
-- 1. Tabel aanmaken
create table if not exists public.<naam> (
id uuid primary key default gen_random_uuid(),
-- ... eigen kolommen
created_at timestamptz not null default now()
);
-- 2. Grants (kies de subset die past bij de rol)
grant select on public.<naam> to anon;
grant select, insert, update, delete on public.<naam> to authenticated;
grant select, insert, update, delete on public.<naam> to service_role;
-- Als de tabel een sequence gebruikt (bv. bigserial id):
-- grant usage, select on sequence public.<naam>_id_seq to anon, authenticated, service_role;
-- 3. Row Level Security aanzetten
alter table public.<naam> enable row level security;
-- 4. Policies (pas aan op de use case)
create policy "<naam>_select_own"
on public.<naam>
for select
to authenticated
using (auth.uid() = user_id);Op 28 april 2026 heeft Supabase aangekondigd dat het impliciete GRANT-gedrag op het public schema verdwijnt. Voor dit project (Next.js + @supabase/supabase-js, ~12 tabellen in public) gelden de volgende feiten:
public worden aangemaakt zonder expliciete GRANT-statements zijn onbereikbaar via de Data API (supabase-js .from(...) calls falen met PostgREST 42501).supabase/migrations/ bevat GRANT-statements — er wordt alleen op RLS geleund.Doel: een lichte, niet-disruptieve voorbereiding zodat toekomstige migraties automatisch goed gaan en het project niet op 30 oktober 2026 met verrassingen wakker wordt.
Twee deliverables, beide klein:
Nieuw bestand: supabase/migrations/TEMPLATE.sql.example
Een commentaar-richtsnoer + grant-snippet die je copy-paste't bij elke nieuwe tabel. Voorbeeld inhoud:
-- Template voor nieuwe tabellen in het public schema.
-- Volgorde: create table → grants → RLS enable → policies.
-- Reden: vanaf 30 okt 2026 verleent Supabase geen impliciete grants meer op
-- nieuwe public-tabellen. Zonder de grant hieronder is de tabel niet
-- bereikbaar via de Data API (supabase-js .from(...)).
create table if not exists public.<naam> (
id uuid primary key default gen_random_uuid(),
-- ...
created_at timestamptz not null default now()
);
grant select on public.<naam> to anon;
grant select, insert, update, delete on public.<naam> to authenticated;
grant select, insert, update, delete on public.<naam> to service_role;
alter table public.<naam> enable row level security;
-- create policy ...Eén korte sectie toevoegen aan CLAUDE.md onder een nieuwe ## Supabase migraties-kop, met de drie-stappen-regel (create → grant → enable RLS → policies) en een verwijzing naar het template. Daarmee pikt elke toekomstige AI-sessie het automatisch op.
revoke default privileges-statements draaien. Dat zou ons vrijwillig vóór 30 okt 2026 op het nieuwe regime zetten, met risico op verrassingen zonder voordeel.GRANT USAGE ON SCHEMA public-statements toevoegen. Die staan al van de Supabase-default en worden niet door deze wijziging geraakt.supabase/migrations/TEMPLATE.sql.example (alleen voor ontwikkelaars/agents; niet uitgevoerd door Supabase CLI omdat de extensie .example is)CLAUDE.md — sectie ## Supabase migraties toevoegen.context/plans/supabase-grants.md zodat het portable is en met de repo meereistrevoke default privileges-blok uit de Supabase changelog, en bevestig dat supabase.from("test").select() werkt (= grants werken correct).cars, profiles, favorites, posts) en het naar migraties brengen daarvan. Niet urgent voor deze breaking change, want hun grants blijven intact.pre-commit check / lint die ontbrekende grants in nieuwe migraties signaleert.