diff --git a/packages/trpc/server/routers/viewer/teams/delete.handler.ts b/packages/trpc/server/routers/viewer/teams/delete.handler.ts index b5f278686a..b3ea0c3174 100644 --- a/packages/trpc/server/routers/viewer/teams/delete.handler.ts +++ b/packages/trpc/server/routers/viewer/teams/delete.handler.ts @@ -1,5 +1,7 @@ -import { isTeamOwner } from "@calcom/features/ee/teams/lib/queries"; +import { PermissionCheckService } from "@calcom/features/pbac/services/permission-check.service"; import { TeamService } from "@calcom/lib/server/service/teamService"; +import { prisma } from "@calcom/prisma"; +import { MembershipRole } from "@calcom/prisma/enums"; import { TRPCError } from "@trpc/server"; @@ -14,7 +16,26 @@ type DeleteOptions = { }; export const deleteHandler = async ({ ctx, input }: DeleteOptions) => { - if (!(await isTeamOwner(ctx.user?.id, input.teamId))) throw new TRPCError({ code: "UNAUTHORIZED" }); + const team = await prisma.team.findUnique({ + where: { + id: input.teamId, + }, + select: { + isOrganization: true, + }, + }); + + if (!team) throw new TRPCError({ code: "NOT_FOUND" }); + + const permissionCheckService = new PermissionCheckService(); + const hasPermission = await permissionCheckService.checkPermission({ + userId: ctx.user.id, + teamId: input.teamId, + permission: team.isOrganization ? "organization.delete" : "team.delete", + fallbackRoles: [MembershipRole.OWNER], + }); + + if (!hasPermission) throw new TRPCError({ code: "FORBIDDEN" }); return await TeamService.delete({ id: input.teamId }); };