Konto-Seite: eigenen Namen, E-Mail, Passwort und Passkeys selbst verwalten
- Klick auf den Benutzernamen im Header (Kantinen- und Admin-Bereich) öffnet /konto - Name-Änderung per RLS-Policy mit spaltenscharfem Grant (nur full_name), Rolle bleibt ausschließlich über die Admin-API änderbar - E-Mail-Änderung über supabase.auth.updateUser mit Bestätigungslink; Trigger synchronisiert profiles.email nach Bestätigung - Passwortänderung verlangt zur Verifizierung das aktuelle Passwort (Re-Login-Check) plus Wiederholung des neuen Passworts - Passkey-Verwaltung aus /intern/konto hierher verschoben
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
-- =============================================================
|
||||
-- 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();
|
||||
Reference in New Issue
Block a user