Files
AfiS-Aktensystem/web/app/(app)/admin/sections.ts
T
Harlekin e0b03ea336
Prüfung / Lint, Typen, Tests (push) Canceled after 0s
Prüfung / Images bauen (pdf) (push) Canceled after 0s
Prüfung / Images bauen (web) (push) Canceled after 0s
Prüfung / Images bauen (worker) (push) Canceled after 0s
Images / bauen (pdf, docker/pdf.Dockerfile) (push) Canceled after 0s
Images / bauen (web, docker/web.Dockerfile) (push) Canceled after 0s
Images / bauen (worker, docker/worker.Dockerfile) (push) Canceled after 0s
Gedankenstriche durch Bindestriche ersetzt
375 Vorkommen in 210 Dateien. Betrifft Kommentare, Oberflaechentexte und die
README; an keiner Stelle Bedeutung, nur Zeichensetzung.
2026-09-04 08:54:52 +02:00

65 lines
2.2 KiB
TypeScript

import type { EffectivePermissions } from '@/lib/auth/permissions'
import { de } from '@/lib/i18n/de'
/**
* Die Bereiche der Verwaltung, an einer Stelle.
*
* Vorher standen Rollenverwaltung, Vorlagen und Änderungsrichtlinie als drei
* eigene Einträge in der Kopfzeile - drei Einträge für etwas, das man selten
* und dann meist zusammenhängend braucht. Jetzt ist es ein Eintrag mit einer
* Leiste darunter.
*
* Die Rechteprüfung steht hier **nicht** als Berechtigung, sondern nur für die
* Anzeige: jede Seite prüft selbst noch einmal mit `requirePermission`. Eine
* versteckte Kachel ist kein Schutz.
*/
export type AdminSection = {
key: string
href: string
label: string
description: string
}
export function adminSections(p: EffectivePermissions): AdminSection[] {
const darf = (recht: 'roles.manage' | 'template.manage' | 'audit.read' | 'admin'): boolean =>
p.isAdmin || (recht !== 'admin' && p.permissions.has(recht))
const alle: (AdminSection & { sichtbar: boolean })[] = [
{ key: 'roles', href: '/admin/rollen', sichtbar: darf('roles.manage'), ...text('roles') },
{
key: 'departments',
href: '/admin/abteilungen',
sichtbar: darf('roles.manage'),
...text('departments'),
},
{
key: 'templates',
href: '/admin/vorlagen',
sichtbar: darf('template.manage'),
...text('templates'),
},
{ key: 'policy', href: '/admin/richtlinie', sichtbar: darf('admin'), ...text('policy') },
{ key: 'log', href: '/admin/protokoll', sichtbar: darf('audit.read'), ...text('log') },
{ key: 'system', href: '/admin/system', sichtbar: darf('admin'), ...text('system') },
]
return alle.filter((bereich) => bereich.sichtbar).map(({ sichtbar: _, ...rest }) => rest)
}
function text(key: string): { label: string; description: string } {
return {
label: de.admin.sections[key] ?? key,
description: de.admin.descriptions[key] ?? '',
}
}
/** Ob jemand die Verwaltung überhaupt sieht. Für die Kopfzeile. */
export function hasAdminAccess(p: EffectivePermissions): boolean {
return (
p.isAdmin ||
p.permissions.has('roles.manage') ||
p.permissions.has('template.manage') ||
p.permissions.has('audit.read')
)
}