import type { GlobalConfig } from "payload"; import { isAdmin } from "@/access"; /** * Consent-category configuration shown in the public cookie banner * (components/Analytics.tsx). Read access is intentionally public — the * unauthenticated frontend needs the labels/descriptions and the * enabled/disabled flags before a visitor has logged in anywhere. * * "necessary" deliberately has no `enabled` field at all, anywhere in this * schema — there is no toggle to accidentally switch off, so it can never * be disabled through the admin UI (see requirement: technically required * functionality must not be disable-able by an admin). */ export const CookieSettings: GlobalConfig = { slug: "cookie-settings", label: "Cookie-Einstellungen", admin: { description: "Kategorien und Texte für den Cookie-Consent-Banner der Website.", group: "Datenschutz", }, access: { read: () => true, update: isAdmin, }, fields: [ { name: "consentVersion", type: "text", label: "Consent-Version", required: true, defaultValue: "1.0", admin: { description: "Bei Änderung müssen alle Besucher erneut zustimmen — bereits gespeicherte Einwilligungen mit einer älteren Version werden ignoriert und der Banner erscheint erneut.", }, }, { type: "group", name: "necessary", label: "Notwendig", admin: { description: "Immer aktiv — technisch erforderlich, kann nicht deaktiviert werden." }, fields: [ { name: "label", type: "text", label: "Bezeichnung", required: true, defaultValue: "Notwendig" }, { name: "description", type: "textarea", label: "Beschreibung", required: true, defaultValue: "Für den Betrieb der Website technisch erforderlich (z. B. Login, Sitzung). Kann nicht deaktiviert werden.", }, ], }, { type: "group", name: "preferences", label: "Präferenzen", fields: [ { name: "label", type: "text", label: "Bezeichnung", required: true, defaultValue: "Präferenzen" }, { name: "description", type: "textarea", label: "Beschreibung", required: true, defaultValue: "Speichert Einstellungen wie z. B. bevorzugte Anzeigeoptionen.", }, { name: "enabled", type: "checkbox", label: "Kategorie aktiv", defaultValue: true, admin: { description: "Wenn deaktiviert, wird diese Kategorie im Banner nicht mehr angeboten." }, }, ], }, { type: "group", name: "statistics", label: "Statistik", fields: [ { name: "label", type: "text", label: "Bezeichnung", required: true, defaultValue: "Statistik" }, { name: "description", type: "textarea", label: "Beschreibung", required: true, defaultValue: "Anonymisierte, datensparsame Reichweitenmessung (Seitenaufrufe, Ereignisse) ohne personenbezogene Profile.", }, { name: "enabled", type: "checkbox", label: "Kategorie aktiv", defaultValue: true, admin: { description: "Globaler Schalter für das gesamte Analytics-System. Wenn deaktiviert, wird diese Kategorie im Banner nicht mehr angeboten und Analytics-Daten werden serverseitig abgelehnt — auch bei einer noch gespeicherten alten Zustimmung.", }, }, ], }, ], };