diff --git a/apps/hub/app/(app)/admin/event/layout.tsx b/apps/hub/app/(app)/admin/event/layout.tsx new file mode 100644 index 00000000..2f1a30f8 --- /dev/null +++ b/apps/hub/app/(app)/admin/event/layout.tsx @@ -0,0 +1,20 @@ +import { prisma } from "@repo/db"; +import { Error } from "_components/Error"; +import { getServerSession } from "api/auth/[...nextauth]/auth"; + +export default async ({ children }: { children: React.ReactNode }) => { + const session = await getServerSession(); + + if (!session) return ; + + const user = await prisma.user.findUnique({ + where: { + id: session.user.id, + }, + }); + + if (!user?.permissions.includes("ADMIN_EVENT")) + return ; + + return <>{children}; +}; diff --git a/apps/hub/app/(app)/admin/station/layout.tsx b/apps/hub/app/(app)/admin/station/layout.tsx new file mode 100644 index 00000000..4b82ebd3 --- /dev/null +++ b/apps/hub/app/(app)/admin/station/layout.tsx @@ -0,0 +1,20 @@ +import { prisma } from "@repo/db"; +import { Error } from "_components/Error"; +import { getServerSession } from "api/auth/[...nextauth]/auth"; + +export default async ({ children }: { children: React.ReactNode }) => { + const session = await getServerSession(); + + if (!session) return ; + + const user = await prisma.user.findUnique({ + where: { + id: session.user.id, + }, + }); + + if (!user?.permissions.includes("ADMIN_STATION")) + return ; + + return <>{children}; +}; diff --git a/apps/hub/app/(app)/admin/user/layout.tsx b/apps/hub/app/(app)/admin/user/layout.tsx new file mode 100644 index 00000000..fcce6a6a --- /dev/null +++ b/apps/hub/app/(app)/admin/user/layout.tsx @@ -0,0 +1,20 @@ +import { prisma } from "@repo/db"; +import { Error } from "_components/Error"; +import { getServerSession } from "api/auth/[...nextauth]/auth"; + +export default async ({ children }: { children: React.ReactNode }) => { + const session = await getServerSession(); + + if (!session) return ; + + const user = await prisma.user.findUnique({ + where: { + id: session.user.id, + }, + }); + + if (!user?.permissions.includes("ADMIN_USER")) + return ; + + return <>{children}; +}; diff --git a/apps/hub/app/_components/Error.tsx b/apps/hub/app/_components/Error.tsx index 683c92e6..a968ed50 100644 --- a/apps/hub/app/_components/Error.tsx +++ b/apps/hub/app/_components/Error.tsx @@ -7,5 +7,23 @@ export const Error = ({ statusCode: number; title: string; }) => { - return ; + return ( +
+
+

{statusCode}

+

+ Oh nein! Ein Fehler ist aufgetreten. +

+

+ {title || "Ein unerwarteter Fehler ist aufgetreten."} +

+ +
+
+ ); }; diff --git a/packages/database/prisma/schema/user.prisma b/packages/database/prisma/schema/user.prisma index df2db4de..38fc1fed 100644 --- a/packages/database/prisma/schema/user.prisma +++ b/packages/database/prisma/schema/user.prisma @@ -11,8 +11,9 @@ enum BADGES { enum PERMISSION { ADMIN_EVENT ADMIN_USER - AUDIO AUDIO_ADMIN + ADMIN_STATION + AUDIO PILOT DISPO }