* adds column in schema * adds org setting to enable/disable admin api * adds guard to v1 v2 * add update query for isAdminAPIEnabled to be true for existing orgs * adds contact sales * fix typo * fix tests * fixup v2 guard * v1 fix * fix and add integration test * fixes tests --WIP * fix test --WIP * fixupgit add src/modules * WIP * fix * fix: e2e test org teams * fix: e2e test org users * review feedback * requested change * fix --------- Co-authored-by: Keith Williams <keithwillcode@gmail.com> Co-authored-by: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> Co-authored-by: Peer Richelsen <peeroke@gmail.com> Co-authored-by: Morgan Vernay <morgan@cal.com>
41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
import type { NextApiRequest } from "next";
|
|
|
|
import prisma from "@calcom/prisma";
|
|
import { UserPermissionRole, MembershipRole } from "@calcom/prisma/enums";
|
|
|
|
import { ScopeOfAdmin } from "./scopeOfAdmin";
|
|
|
|
export const isAdminGuard = async (req: NextApiRequest) => {
|
|
const { userId } = req;
|
|
const user = await prisma.user.findUnique({ where: { id: userId }, select: { role: true } });
|
|
if (!user) return { isAdmin: false, scope: null };
|
|
|
|
const { role: userRole } = user;
|
|
if (userRole === UserPermissionRole.ADMIN) return { isAdmin: true, scope: ScopeOfAdmin.SystemWide };
|
|
|
|
const orgOwnerOrAdminMemberships = await prisma.membership.findMany({
|
|
where: {
|
|
userId: userId,
|
|
accepted: true,
|
|
team: {
|
|
isOrganization: true,
|
|
organizationSettings: {
|
|
isAdminAPIEnabled: true,
|
|
},
|
|
},
|
|
OR: [{ role: MembershipRole.OWNER }, { role: MembershipRole.ADMIN }],
|
|
},
|
|
select: {
|
|
team: {
|
|
select: {
|
|
id: true,
|
|
isOrganization: true,
|
|
},
|
|
},
|
|
},
|
|
});
|
|
if (!orgOwnerOrAdminMemberships.length) return { isAdmin: false, scope: null };
|
|
|
|
return { isAdmin: true, scope: ScopeOfAdmin.OrgOwnerOrAdmin };
|
|
};
|