Added admin permission check

This commit is contained in:
PxlLoewe
2025-03-17 22:07:52 -07:00
parent 51d6363e95
commit 3e7391d255
5 changed files with 81 additions and 2 deletions

View File

@@ -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 <Error title="Nicht eingeloggt" statusCode={401} />;
const user = await prisma.user.findUnique({
where: {
id: session.user.id,
},
});
if (!user?.permissions.includes("ADMIN_EVENT"))
return <Error title="Keine Berechtigung" statusCode={403} />;
return <>{children}</>;
};

View File

@@ -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 <Error title="Nicht eingeloggt" statusCode={401} />;
const user = await prisma.user.findUnique({
where: {
id: session.user.id,
},
});
if (!user?.permissions.includes("ADMIN_STATION"))
return <Error title="Keine Berechtigung" statusCode={403} />;
return <>{children}</>;
};

View File

@@ -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 <Error title="Nicht eingeloggt" statusCode={401} />;
const user = await prisma.user.findUnique({
where: {
id: session.user.id,
},
});
if (!user?.permissions.includes("ADMIN_USER"))
return <Error title="Keine Berechtigung" statusCode={403} />;
return <>{children}</>;
};

View File

@@ -7,5 +7,23 @@ export const Error = ({
statusCode: number; statusCode: number;
title: string; title: string;
}) => { }) => {
return <Error statusCode={404} title="User not found" />; return (
<div className="flex items-center justify-center ">
<div className="shadow-lg rounded-2xl p-8 text-center max-w-md w-full ">
<h1 className="text-6xl font-bold text-red-500">{statusCode}</h1>
<p className="text-xl font-semibold mt-4">
Oh nein! Ein Fehler ist aufgetreten.
</p>
<p className="text-gray-600 mt-2">
{title || "Ein unerwarteter Fehler ist aufgetreten."}
</p>
<button
onClick={() => window.location.reload()}
className="btn btn-dash my-2"
>
Refresh Page
</button>
</div>
</div>
);
}; };

View File

@@ -11,8 +11,9 @@ enum BADGES {
enum PERMISSION { enum PERMISSION {
ADMIN_EVENT ADMIN_EVENT
ADMIN_USER ADMIN_USER
AUDIO
AUDIO_ADMIN AUDIO_ADMIN
ADMIN_STATION
AUDIO
PILOT PILOT
DISPO DISPO
} }