-- 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 $$;