Deaktivierte Module werden nicht nur in der Navigation ausgeblendet, sondern serverseitig gesperrt: - requireModule-Guard (server/modules.ts): prüft TenantModule und leitet bei deaktiviertem Modul auf /dashboard?module=disabled um (fehlende Zeile = aktiv). - Modul-Layout je Routenbereich (assets, processes, risks, measures, policies, suppliers, dependencies) — deckt alle Unterrouten mit ab (GET-Zugriff). - API-Ebene: requireModule zusätzlich im gemeinsamen guard() der Policy-Actions (Layout-Guard läuft bei Server-Actions erst nach der Mutation). Verifiziert im Browser: bei deaktiviertem Policies-Modul werden /policies und /policies/R08 auf /dashboard?module=disabled umgeleitet; Nav blendet den Punkt aus. Hinweis: Das gleiche guard()-Einzeiler-Muster kann auf die Actions der übrigen Module übertragen werden (bislang exemplarisch für Policies); die Route-Layouts sichern bereits alle Modul-Seiten. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
8 lines
282 B
TypeScript
8 lines
282 B
TypeScript
import { requireModule } from "@/server/modules";
|
|
|
|
/** Serverseitige Modul-Durchsetzung für alle Routen dieses Bereichs (§3.4). */
|
|
export default async function ModuleLayout({ children }: { children: React.ReactNode }) {
|
|
await requireModule("risk");
|
|
return <>{children}</>;
|
|
}
|