import type { Modul, Rolle } from '@prisma/client' /** * Rollen und Modulfreigaben - ohne "server-only", weil die Beschriftungen * auch im Browser gebraucht werden. * * Wichtig: Diese Datei entscheidet nichts allein. Der eigentliche * Zugriffsschutz sitzt in src/lib/auth/sitzung.ts und prueft serverseitig * gegen die betreuteId. Hier stehen nur die Regeln, damit sie an einem Ort * nachlesbar sind. */ export const ROLLEN_BESCHRIFTUNG: Record = { BETREUER: 'Betreuer', MITLESER: 'Mitleser', ADMIN: 'Administrator', } export const ROLLEN_ERKLAERUNG: Record = { BETREUER: 'Darf alles sehen und ändern, was zu den zugeordneten Betreuten gehört.', MITLESER: 'Darf nur lesen, und nur die ausdrücklich freigegebenen Bereiche.', ADMIN: 'Verwaltet Benutzer und Systemeinstellungen.', } export const MODUL_BESCHRIFTUNG: Record = { STAMMDATEN: 'Stammdaten', VORGAENGE: 'Vorgänge', FRISTEN: 'Fristen', DOKUMENTE: 'Dokumente', FINANZEN: 'Vermögen & Kassenbuch', SOZIALHILFE: 'Sozialhilfe', IMMOBILIE: 'Immobilie', VERTRAEGE: 'Versicherungen & Verträge', GESUNDHEIT: 'Heim & Pflege', KONTAKTE: 'Kontakte', BERICHTE: 'Berichte', } export const ALLE_MODULE: Modul[] = [ 'STAMMDATEN', 'VORGAENGE', 'FRISTEN', 'DOKUMENTE', 'FINANZEN', 'SOZIALHILFE', 'IMMOBILIE', 'VERTRAEGE', 'GESUNDHEIT', 'KONTAKTE', 'BERICHTE', ] /** * Module mit besonders sensiblen Inhalten. Fuer sie ist eine Freigabe an * Mitleser eine bewusste Entscheidung - die Oberflaeche weist darauf hin. */ export const BESONDERS_SENSIBEL: Modul[] = ['GESUNDHEIT', 'FINANZEN', 'SOZIALHILFE'] export type Zugriffsart = 'lesen' | 'schreiben' export type Zugang = { rolle: Rolle freigegebeneModule: Modul[] } /** * Die eine Regel, nach der entschieden wird: * * - BETREUER darf alles, lesen wie schreiben. * - ADMIN darf alles (er verwaltet die Anwendung). * - MITLESER darf ausschliesslich lesen, und nur freigegebene Module. */ export function darf(zugang: Zugang | null, modul: Modul, art: Zugriffsart = 'lesen'): boolean { if (!zugang) return false if (zugang.rolle === 'BETREUER' || zugang.rolle === 'ADMIN') return true if (zugang.rolle === 'MITLESER') { if (art === 'schreiben') return false return zugang.freigegebeneModule.includes(modul) } return false } /** Kurzform fuer die Oberflaeche. */ export function darfSchreiben(zugang: Zugang | null, modul: Modul): boolean { return darf(zugang, modul, 'schreiben') }