Files
calendar/packages/trpc/server/routers/viewer/teams/deleteInvite.handler.ts
T
Benny JooandGitHub 8d7cdf9d3b refactor: use permission check service for isTeamAdmin (#24026)
* saml

* addGuests.handler.ts

* rename canAccess to canAccessOrganization and use organization.read

* update usages

* team update handler

* team member invite

* event type update

* remove isTeamAdmin util

* updateInternalNotesPresets

* setInviteExpiration

* event type update

* deleteInvite

* createInvite

* team publish

* fixes

* final

* address feedback

* update test
2025-09-25 08:54:16 +01:00

52 lines
1.6 KiB
TypeScript

import { PermissionCheckService } from "@calcom/features/pbac/services/permission-check.service";
import { prisma } from "@calcom/prisma";
import { MembershipRole } from "@calcom/prisma/enums";
import type { TrpcSessionUser } from "@calcom/trpc/server/types";
import { TRPCError } from "@trpc/server";
import type { TDeleteInviteInputSchema } from "./deleteInvite.schema";
type DeleteInviteOptions = {
ctx: {
user: NonNullable<TrpcSessionUser>;
};
input: TDeleteInviteInputSchema;
};
export const deleteInviteHandler = async ({ ctx, input }: DeleteInviteOptions) => {
const { token } = input;
const verificationToken = await prisma.verificationToken.findUnique({
where: {
token: token,
},
select: {
teamId: true,
id: true,
team: {
select: { isOrganization: true },
},
},
});
if (!verificationToken) throw new TRPCError({ code: "NOT_FOUND" });
if (!verificationToken.teamId) throw new TRPCError({ code: "UNAUTHORIZED" });
const permissionCheckService = new PermissionCheckService();
const isOrgContext = !!verificationToken.team?.isOrganization;
const permission = isOrgContext ? "organization.invite" : "team.invite";
const hasInvitePermission = await permissionCheckService.checkPermission({
userId: ctx.user.id,
teamId: verificationToken.teamId,
permission,
fallbackRoles: [MembershipRole.OWNER, MembershipRole.ADMIN],
});
if (!hasInvitePermission) throw new TRPCError({ code: "UNAUTHORIZED" });
await prisma.verificationToken.delete({ where: { id: verificationToken.id } });
};
export default deleteInviteHandler;