46 lines
1.2 KiB
TypeScript
46 lines
1.2 KiB
TypeScript
|
import type { GetServerSidePropsContext } from "next";
|
||
|
|
||
|
import { getServerSession } from "@calcom/features/auth/lib/getServerSession";
|
||
|
import { getFeatureFlagMap } from "@calcom/features/flags/server/utils";
|
||
|
import { MembershipRole } from "@calcom/prisma/client";
|
||
|
|
||
|
export const getServerSideProps = async ({ req, res }: GetServerSidePropsContext) => {
|
||
|
const prisma = await import("@calcom/prisma").then((mod) => mod.default);
|
||
|
const flags = await getFeatureFlagMap(prisma);
|
||
|
// Check if organizations are enabled
|
||
|
if (flags["organizations"] !== true) {
|
||
|
return {
|
||
|
notFound: true,
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// Check if logged in user has an organization assigned
|
||
|
const session = await getServerSession({ req, res });
|
||
|
if (!session?.user.organizationId) {
|
||
|
return {
|
||
|
notFound: true,
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// Check if logged in user has OWNER/ADMIN role in organization
|
||
|
const membership = await prisma.membership.findFirst({
|
||
|
where: {
|
||
|
userId: session?.user.id,
|
||
|
teamId: session?.user.organizationId,
|
||
|
},
|
||
|
select: {
|
||
|
role: true,
|
||
|
},
|
||
|
});
|
||
|
if (!membership?.role || membership?.role === MembershipRole.MEMBER) {
|
||
|
return {
|
||
|
notFound: true,
|
||
|
};
|
||
|
}
|
||
|
|
||
|
// Otherwise, all good
|
||
|
return {
|
||
|
props: {},
|
||
|
};
|
||
|
};
|