-- ============================================================= -- Selbstverwaltung des eigenen Kontos (Name, E-Mail-Abgleich) -- ============================================================= -- Jeder Benutzer darf seinen eigenen Anzeigenamen ändern. Die Spalte -- "role" bleibt geschützt: Rechte werden nicht per RLS eingeschränkt, -- sondern per Spalten-Grant – selbst ein manuell gebauter Request mit -- {"role": "admin"} im Payload scheitert an fehlenden Rechten auf die -- Spalte. Rollenänderungen laufen weiterhin ausschließlich über die -- Admin-API mit dem Service-Role-Key. revoke update on public.profiles from authenticated; grant update (full_name) on public.profiles to authenticated; create policy "profiles_update_own_name" on public.profiles for update to authenticated using (id = (select auth.uid())) with check (id = (select auth.uid())); -- Hält profiles.email synchron, sobald eine E-Mail-Änderung in -- auth.users bestätigt wurde (supabase.auth.updateUser({ email })). create or replace function public.handle_user_email_change() returns trigger language plpgsql security definer set search_path = public as $$ begin update public.profiles set email = new.email where id = new.id; return new; end; $$; create trigger on_auth_user_email_updated after update of email on auth.users for each row execute function public.handle_user_email_change();