28 lines
825 B
PL/PgSQL
28 lines
825 B
PL/PgSQL
-- R1 Basis: gemeinsame Hilfsfunktionen für alle Tabellen.
|
|
-- Jede Tabelle hat: id (uuid, PK), created_at, updated_at.
|
|
|
|
-- Setzt updated_at bei jeder Änderung und schützt id und created_at vor Änderungen.
|
|
-- Der Client kann diese drei Spalten damit nie verfälschen.
|
|
create or replace function public.set_updated_at()
|
|
returns trigger
|
|
language plpgsql
|
|
set search_path = ''
|
|
as $$
|
|
begin
|
|
new.id := old.id;
|
|
new.created_at := old.created_at;
|
|
new.updated_at := now();
|
|
return new;
|
|
end;
|
|
$$;
|
|
|
|
-- Admin-Rolle kommt aus app_metadata des JWT. Das kann nur serverseitig gesetzt werden,
|
|
-- nie vom Client (anders als user_metadata).
|
|
create or replace function public.is_admin()
|
|
returns boolean
|
|
language sql
|
|
stable
|
|
set search_path = ''
|
|
as $$
|
|
select coalesce((select auth.jwt()) -> 'app_metadata' ->> 'role', '') = 'admin';
|
|
$$;
|