From 77519a077c45effd4d3c0fe6827bcea979d7ead0 Mon Sep 17 00:00:00 2001 From: Lauris Skraucis Date: Tue, 16 Jul 2024 08:08:28 +0200 Subject: [PATCH] refactor: allow system admins to create event-type without membership (#15774) --- .../services/event-types.service.ts | 1 + .../services/event-types.service.ts | 1 + .../server/routers/viewer/eventTypes/create.handler.ts | 8 +++++++- 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_04_15/services/event-types.service.ts b/apps/api/v2/src/ee/event-types/event-types_2024_04_15/services/event-types.service.ts index 490ceb8635..5de73a413a 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_04_15/services/event-types.service.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_04_15/services/event-types.service.ts @@ -60,6 +60,7 @@ export class EventTypesService_2024_04_15 { const profileId = user.movedToProfile?.id || null; return { id: user.id, + role: user.role, organizationId: user.organizationId, organization: { isOrgAdmin }, profile: { id: profileId }, diff --git a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/event-types.service.ts b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/event-types.service.ts index b3947afb31..b15f9684c4 100644 --- a/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/event-types.service.ts +++ b/apps/api/v2/src/ee/event-types/event-types_2024_06_14/services/event-types.service.ts @@ -94,6 +94,7 @@ export class EventTypesService_2024_06_14 { const profileId = user.movedToProfile?.id || null; return { id: user.id, + role: user.role, organizationId: user.organizationId, organization: { isOrgAdmin }, profile: { id: profileId }, diff --git a/packages/trpc/server/routers/viewer/eventTypes/create.handler.ts b/packages/trpc/server/routers/viewer/eventTypes/create.handler.ts index 112632b36a..10917b8575 100644 --- a/packages/trpc/server/routers/viewer/eventTypes/create.handler.ts +++ b/packages/trpc/server/routers/viewer/eventTypes/create.handler.ts @@ -15,6 +15,7 @@ import type { TCreateInputSchema } from "./create.schema"; type SessionUser = NonNullable; type User = { id: SessionUser["id"]; + role: SessionUser["role"]; organizationId: SessionUser["organizationId"]; organization: { isOrgAdmin: SessionUser["organization"]["isOrgAdmin"]; @@ -61,7 +62,12 @@ export const createHandler = async ({ ctx, input }: CreateOptions) => { }, }); - if (!hasMembership?.role || !(["ADMIN", "OWNER"].includes(hasMembership.role) || isOrgAdmin)) { + const isSystemAdmin = ctx.user.role === "ADMIN"; + + if ( + !isSystemAdmin && + (!hasMembership?.role || !(["ADMIN", "OWNER"].includes(hasMembership.role) || isOrgAdmin)) + ) { console.warn(`User ${userId} does not have permission to create this new event type`); throw new TRPCError({ code: "UNAUTHORIZED" }); }