mirror of
https://github.com/hanzoai/calendar.git
synced 2026-10-30 14:46:43 +00:00
34d2a13080
- Move permission validation from AdminLayoutAppDirClient.tsx (client) to layout.tsx (server) - Add server-side redirect using next/navigation redirect() function - Remove client-side useEffect permission check to eliminate flash - Follow same pattern as organizations layout for consistent auth handling - Users without admin role are redirected to /settings/my-account/profile before any content renders Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
26 lines
1.0 KiB
TypeScript
26 lines
1.0 KiB
TypeScript
import { cookies, headers } from "next/headers";
|
|
import { redirect } from "next/navigation";
|
|
import React from "react";
|
|
|
|
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
|
|
import { UserPermissionRole } from "@calcom/prisma/enums";
|
|
|
|
import { buildLegacyRequest } from "@lib/buildLegacyCtx";
|
|
|
|
import SettingsLayoutAppDir from "../(settings-layout)/layout";
|
|
import type { AdminLayoutProps } from "./AdminLayoutAppDirClient";
|
|
import AdminLayoutAppDirClient from "./AdminLayoutAppDirClient";
|
|
|
|
type AdminLayoutAppDirProps = Omit<AdminLayoutProps, "userRole">;
|
|
|
|
export default async function AdminLayoutAppDir(props: AdminLayoutAppDirProps) {
|
|
const session = await getServerSession({ req: buildLegacyRequest(await headers(), await cookies()) });
|
|
const userRole = session?.user?.role;
|
|
|
|
if (userRole !== UserPermissionRole.ADMIN) {
|
|
return redirect("/settings/my-account/profile");
|
|
}
|
|
|
|
return await SettingsLayoutAppDir({ children: <AdminLayoutAppDirClient {...props} userRole={userRole} /> });
|
|
}
|