diff --git a/src/app/(main)/report/layout.tsx b/src/app/(main)/report/layout.tsx index 6b277b0..bb79527 100644 --- a/src/app/(main)/report/layout.tsx +++ b/src/app/(main)/report/layout.tsx @@ -1,10 +1,23 @@ import { I18nProvider } from "@/i18n"; +import { authOptions } from "@/config/authConfig"; +import { AUTH } from "@/authorities"; +import { getServerSession } from "next-auth"; +import { redirect } from "next/navigation"; -export default function ReportLayout({ +export default async function ReportLayout({ children, }: { children: React.ReactNode; }) { + const session = await getServerSession(authOptions); + const abilities = session?.user?.abilities ?? []; + const canAccess = + abilities.includes(AUTH.REPORT_MGMT) || abilities.includes(AUTH.ADMIN); + + if (!canAccess) { + redirect("/dashboard"); + } + return ( {children} diff --git a/src/authorities.ts b/src/authorities.ts index 7a412a7..b3b75ce 100644 --- a/src/authorities.ts +++ b/src/authorities.ts @@ -16,6 +16,6 @@ export const AUTH = { JOB_CREATE: "JOB_CREATE", JOB_PICK: "JOB_PICK", JOB_MAT: "JOB_MAT", - JOB_PROD: "JOB_PROD", - + JOB_PROD: "JOB_PROD", + REPORT_MGMT: "REPORT_MGMT", } as const; \ No newline at end of file diff --git a/src/components/NavigationContent/NavigationContent.tsx b/src/components/NavigationContent/NavigationContent.tsx index 6e0ee6e..426db03 100644 --- a/src/components/NavigationContent/NavigationContent.tsx +++ b/src/components/NavigationContent/NavigationContent.tsx @@ -226,7 +226,7 @@ const NavigationContent: React.FC = () => { icon: , labelKey: "nav.report", path: "/report", - requiredAbility: [AUTH.TESTING, AUTH.ADMIN], + requiredAbility: [AUTH.REPORT_MGMT, AUTH.ADMIN], isHidden: false, }, {