From 1b23594ae8b917b95dbd455e7de27ed780275f30 Mon Sep 17 00:00:00 2001 From: tommy Date: Thu, 11 Jun 2026 13:24:50 +0800 Subject: [PATCH] report permission --- src/app/(main)/report/layout.tsx | 15 ++++++++++++++- src/authorities.ts | 4 ++-- .../NavigationContent/NavigationContent.tsx | 2 +- 3 files changed, 17 insertions(+), 4 deletions(-) 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, }, {