Improve workspace auth context surface (#18164)

This commit is contained in:
Weiko
2026-03-05 16:13:59 +01:00
committed by GitHub
parent 5853891b02
commit cfeea43eaf
118 changed files with 453 additions and 677 deletions
@@ -1,10 +1,9 @@
import { isDefined } from 'twenty-shared/utils';
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
import { WorkspaceQueryHookType } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/types/workspace-query-hook.type';
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
import { ForbiddenError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
import { ApplyCalendarEventsVisibilityRestrictionsService } from 'src/modules/calendar/common/query-hooks/calendar-event/services/apply-calendar-events-visibility-restrictions.service';
@@ -22,20 +21,21 @@ export class CalendarEventFindManyPostQueryHook
) {}
async execute(
authContext: AuthContext,
authContext: WorkspaceAuthContext,
_objectName: string,
payload: CalendarEventWorkspaceEntity[],
): Promise<void> {
const { user, apiKey, application } = authContext;
const isUserContext = isUserAuthContext(authContext);
const userId = isUserContext ? authContext.user.id : undefined;
const isTwentyStandardApplication =
isDefined(application) &&
application.universalIdentifier ===
authContext.type === 'application' &&
authContext.application.universalIdentifier ===
TWENTY_STANDARD_APPLICATION.universalIdentifier;
if (
!isDefined(user) &&
!isDefined(apiKey) &&
!isUserContext &&
authContext.type !== 'apiKey' &&
!isTwentyStandardApplication
) {
throw new ForbiddenError('Authentication is required');
@@ -50,7 +50,7 @@ export class CalendarEventFindManyPostQueryHook
await this.applyCalendarEventsVisibilityRestrictionsService.applyCalendarEventsVisibilityRestrictions(
payload,
workspace.id,
user?.id,
userId,
);
}
}
@@ -1,10 +1,9 @@
import { isDefined } from 'twenty-shared/utils';
import { type WorkspacePostQueryHookInstance } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/interfaces/workspace-query-hook.interface';
import { WorkspaceQueryHook } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/decorators/workspace-query-hook.decorator';
import { WorkspaceQueryHookType } from 'src/engine/api/graphql/workspace-query-runner/workspace-query-hook/types/workspace-query-hook.type';
import { type AuthContext } from 'src/engine/core-modules/auth/types/auth-context.type';
import { isUserAuthContext } from 'src/engine/core-modules/auth/guards/is-user-auth-context.guard';
import { type WorkspaceAuthContext } from 'src/engine/core-modules/auth/types/workspace-auth-context.type';
import { ForbiddenError } from 'src/engine/core-modules/graphql/utils/graphql-errors.util';
import { TWENTY_STANDARD_APPLICATION } from 'src/engine/workspace-manager/twenty-standard-application/constants/twenty-standard-applications';
import { ApplyCalendarEventsVisibilityRestrictionsService } from 'src/modules/calendar/common/query-hooks/calendar-event/services/apply-calendar-events-visibility-restrictions.service';
@@ -22,20 +21,21 @@ export class CalendarEventFindOnePostQueryHook
) {}
async execute(
authContext: AuthContext,
authContext: WorkspaceAuthContext,
_objectName: string,
payload: CalendarEventWorkspaceEntity[],
): Promise<void> {
const { user, apiKey, application } = authContext;
const isUserContext = isUserAuthContext(authContext);
const userId = isUserContext ? authContext.user.id : undefined;
const isTwentyStandardApplication =
isDefined(application) &&
application.universalIdentifier ===
authContext.type === 'application' &&
authContext.application.universalIdentifier ===
TWENTY_STANDARD_APPLICATION.universalIdentifier;
if (
!isDefined(user) &&
!isDefined(apiKey) &&
!isUserContext &&
authContext.type !== 'apiKey' &&
!isTwentyStandardApplication
) {
throw new ForbiddenError('Authentication is required');
@@ -50,7 +50,7 @@ export class CalendarEventFindOnePostQueryHook
await this.applyCalendarEventsVisibilityRestrictionsService.applyCalendarEventsVisibilityRestrictions(
payload,
workspace.id,
user?.id,
userId,
);
}
}