diff --git a/src/app/[lang]/dashboard/agents/[id]/page.tsx b/src/app/[lang]/dashboard/agents/[id]/page.tsx index a28232da..ee1a7cf0 100644 --- a/src/app/[lang]/dashboard/agents/[id]/page.tsx +++ b/src/app/[lang]/dashboard/agents/[id]/page.tsx @@ -1,7 +1,19 @@ import ProfileLayout from "@/components/Dashboard/Profile/ProfileLayout"; +import { getServerUserRole } from "@/hooks/api/getUserRole"; import { RouteParams } from "@/types"; +import { UserRole } from "need4deed-sdk"; +import { cookies } from "next/headers"; +import { redirect } from "next/navigation"; export default async function DashboardAgentPage({ params }: RouteParams) { const { id } = await params; + + const cookieStore = await cookies(); + const cookieHeader = cookieStore.toString(); + const userRole = await getServerUserRole(cookieHeader); + + if (!userRole || (userRole !== UserRole.COORDINATOR && userRole !== UserRole.ADMIN)) { + redirect(`/dashboard/agents`); + } return ; } diff --git a/src/hooks/api/getUserRole.ts b/src/hooks/api/getUserRole.ts new file mode 100644 index 00000000..512d8b04 --- /dev/null +++ b/src/hooks/api/getUserRole.ts @@ -0,0 +1,27 @@ +import { fetchFn } from "@/hooks/api/utils"; +import { UserRole } from "need4deed-sdk"; +import { apiPathMe } from "@/config/constants"; + +export interface ApiResponse { + message: string; + data: T; + count: number; +} + +export const getServerUserRole = async (cookieHeader: string): Promise => { + try { + const urlPath = apiPathMe.replace("/api/", ""); + const response = await fetchFn>({ + url: `${process.env.URL_API}/${urlPath}`, + options: { + method: "GET", + headers: { Cookie: cookieHeader }, + cache: "no-store", + }, + }); + return response.data.role; + } catch (error) { + console.error("Failed to fetch server user role:", error); + return null; + } +};