Files
teamvis-selfhost/supabase/migrations/0074_konto_loeschung.sql
T

53 lines
2.5 KiB
SQL

-- Konto löschen aus der App (Apple Guideline 5.1.1(v))
-- ====================================================================
-- Bisher schickte die App nur einen Antrag an die Verwaltung. Apple
-- verlangt, dass sich das Konto in der App selbst löschen lässt. Ablauf
-- ab jetzt:
--
-- 1. sofort: App-Zugang weg (Tokens, Login-Codes, Push), Karte
-- deaktiviert und öffentlich nicht mehr erreichbar — auch nicht als
-- „nicht mehr im Unternehmen"-Seite
-- 2. nach `account_deletion_days` (Default 30): Datensatz samt Foto
-- endgültig gelöscht, die Person bekommt eine Bestätigung
--
-- Die Frist dazwischen erlaubt der Verwaltung, versehentliche Anträge
-- zurückzunehmen und Kontakte/Termine der Karte zu übernehmen (sie hängen
-- per ON DELETE CASCADE an der Karte).
alter table public.employees
add column if not exists deletion_requested_at timestamptz;
comment on column public.employees.deletion_requested_at is
'Zeitpunkt, zu dem die Person ihr Konto in der App gelöscht hat. Gesetzt → Karte offline, endgültige Löschung nach site_settings.account_deletion_days.';
create index if not exists employees_deletion_requested_at_idx
on public.employees (deletion_requested_at)
where deletion_requested_at is not null;
alter table public.site_settings
add column if not exists account_deletion_days integer not null default 30;
comment on column public.site_settings.account_deletion_days is
'Tage zwischen Kontolöschung in der App und endgültiger Löschung des Kartendatensatzes.';
-- Mindestens ein Tag (sonst gibt es kein Zurücknehmen), höchstens ein
-- Jahr (die App nennt die Frist der Person; darüber ist sie für einen
-- Datensatz ohne weiteren Zweck nicht mehr begründbar).
alter table public.site_settings
drop constraint if exists site_settings_account_deletion_days_check;
alter table public.site_settings
add constraint site_settings_account_deletion_days_check
check (account_deletion_days between 1 and 365);
-- Beide Spalten sind nur für den Server bestimmt. Spaltenrechte hat
-- 0073 für anon/authenticated explizit vergeben — neue Spalten sind
-- davon nicht erfasst; das revoke hält es auch auf Instanzen fest, auf
-- denen noch ein Tabellenrecht liegt.
do $$
begin
revoke select (deletion_requested_at) on public.employees from anon, authenticated;
revoke select (account_deletion_days) on public.site_settings from anon, authenticated;
exception when others then
raise notice 'Spaltenrechte nicht angepasst (%).', sqlerrm;
end $$;