40 lines
1.9 KiB
SQL
40 lines
1.9 KiB
SQL
-- Empfang-Kiosk-Modus: separates Auth-Modell fuer das Tablet am
|
|
-- Empfangstresen — KEIN Admin-Zugriff.
|
|
-- ====================================================================
|
|
-- Idee:
|
|
-- * Admin legt einen Kiosk an (Name, z.B. "Empfangstresen Hauptgebaeude"),
|
|
-- bekommt einmalig eine URL `https://teamvis.de/empfang/k/<token>`.
|
|
-- * Diese URL wird einmal auf dem Tablet geoeffnet → Server validiert
|
|
-- Token gegen `token_hash`, setzt langlebiges `kiosk_session`-Cookie
|
|
-- (iron-session, 1 Jahr) und redirected auf `/empfang`.
|
|
-- * Das Tablet bleibt damit dauerhaft im Empfangs-Modus, kann aber
|
|
-- ueber das Cookie nichts anderes als die Empfang-Action.
|
|
-- * Token wird nicht im Klartext gespeichert — bei Verlust einfach
|
|
-- widerrufen (`revoked_at` setzen) und neuen Kiosk anlegen.
|
|
|
|
create table if not exists public.reception_kiosks (
|
|
id uuid primary key default gen_random_uuid(),
|
|
name text not null,
|
|
-- Slug zum Anzeigen in Admin-UI / Logs (z.B. "empfang-haupt").
|
|
-- Eindeutig, klein, ohne Leerzeichen — generiert aus dem Namen.
|
|
slug text not null unique,
|
|
-- SHA256-Hex des Tokens. Token selbst (Base64URL ~32B) wird nur
|
|
-- bei der Erstellung an die Admin-UI zurueckgegeben und sofort
|
|
-- in die Aktivierungs-URL eingebaut. Danach nicht mehr abrufbar.
|
|
token_hash text not null,
|
|
created_at timestamptz not null default now(),
|
|
-- Wann zuletzt ein Request mit dem Kiosk-Cookie validiert wurde.
|
|
-- Hilfreich um vergessene/inaktive Tablets zu erkennen.
|
|
last_used_at timestamptz,
|
|
-- Soft-Revoke. Eintraege bleiben fuer Audit-Zwecke erhalten;
|
|
-- ein widerrufener Kiosk akzeptiert kein Cookie und keine URL mehr.
|
|
revoked_at timestamptz
|
|
);
|
|
|
|
create index if not exists reception_kiosks_token_hash_idx
|
|
on public.reception_kiosks (token_hash)
|
|
where revoked_at is null;
|
|
|
|
alter table public.reception_kiosks enable row level security;
|
|
-- Default deny — Admin-Zugriff laeuft ueber Service-Role.
|