TeamVis Self-Host-Bundle v0.31.0
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
-- Self-Service-Portal: Magic-Link-Auth für Mitarbeiter.
|
||||
-- ====================================================================
|
||||
-- Zweck: Mitarbeiter pflegen Foto, Mobil- & Social-Links eigenständig,
|
||||
-- ohne Admin-Login. Auth läuft über Magic-Link an die Dienst-E-Mail.
|
||||
--
|
||||
-- Flow:
|
||||
-- 1. MA gibt seine Dienst-E-Mail auf /portal ein.
|
||||
-- 2. Server findet Mitarbeiter, erzeugt Token (24 Zeichen URL-safe),
|
||||
-- schreibt Zeile in magic_link_tokens, sendet Mail mit
|
||||
-- https://team.stwhas.de/portal/auth/<token>.
|
||||
-- 3. MA klickt Link → Token wird konsumiert (used_at gesetzt) →
|
||||
-- portal_session-Cookie gesetzt → Redirect /portal/edit.
|
||||
-- 4. Auf /portal/edit darf MA nur das eigene Profil bearbeiten,
|
||||
-- nur die im Form sichtbaren Felder (siehe portal/edit/actions.ts).
|
||||
--
|
||||
-- Sicherheit:
|
||||
-- - Token gültig 30 Min, einmalig konsumierbar.
|
||||
-- - Bei Verdachts-Re-Use des Tokens (used_at != null und erneut
|
||||
-- abgerufen) → Login verweigert + Audit-Log-Eintrag.
|
||||
-- - Tabelle ist anon-blockiert (RLS), nur Service-Role greift zu.
|
||||
|
||||
create table if not exists public.magic_link_tokens (
|
||||
id uuid primary key default gen_random_uuid(),
|
||||
employee_id uuid not null references public.employees(id) on delete cascade,
|
||||
token text not null unique,
|
||||
expires_at timestamptz not null,
|
||||
used_at timestamptz,
|
||||
created_at timestamptz not null default now(),
|
||||
ip text
|
||||
);
|
||||
|
||||
create index if not exists magic_link_tokens_token_idx
|
||||
on public.magic_link_tokens (token);
|
||||
|
||||
create index if not exists magic_link_tokens_employee_idx
|
||||
on public.magic_link_tokens (employee_id, created_at desc);
|
||||
|
||||
alter table public.magic_link_tokens enable row level security;
|
||||
-- Keine Policy → anon hat keinen Zugriff. Service-Role umgeht RLS.
|
||||
Reference in New Issue
Block a user