import { cookies } from "next/headers"; import { redirect } from "next/navigation"; import { Seitenleiste } from "@/components/seitenleiste"; import { ServerUmschalter } from "@/components/server-umschalter"; import { prisma } from "@/lib/db"; import { aktiverServer, SERVER_COOKIE } from "@/lib/server-auswahl"; import { NAVIGATION } from "@/lib/navigation"; import { THEME_COOKIE, themeAusCookie } from "@/lib/theme"; import { versionText } from "@/lib/version"; import { darf } from "@/server/auth/rechte"; import { aktuellerBenutzer } from "@/server/auth/zugang"; /** * Hülle aller angemeldeten Seiten. Sie ist das **zweite** Netz – jede Seite prüft ihr Recht * selbst, weil Next dieses Layout bei Navigation innerhalb der Gruppe nicht neu rendert. */ export default async function AppHuelle({ children }: { children: React.ReactNode }) { const benutzer = await aktuellerBenutzer(); if (!benutzer) redirect("/anmelden"); const speicher = await cookies(); const theme = themeAusCookie(speicher.get(THEME_COOKIE)?.value); const server = await prisma.server.findMany({ select: { name: true, titel: true }, orderBy: { name: "asc" }, }); const aktiv = aktiverServer( server.map((eintrag) => eintrag.name), speicher.get(SERVER_COOKIE)?.value, ); const eintraege = NAVIGATION.filter((eintrag) => !eintrag.ab && darf(benutzer.rolle, eintrag.recht)); return (
} />
{children}
); }