From 8d130908c2ca6dab11df1fb822e740cc44f4d95d Mon Sep 17 00:00:00 2001 From: ANKIT VARSHNEY <132201033+AVtheking@users.noreply.github.com> Date: Tue, 30 Dec 2025 14:16:10 +0530 Subject: [PATCH] Allow user to update profile picture (#16812) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes [#16805](https://github.com/twentyhq/twenty/issues/16805) User was not able to update his own profile picture it showed permisson error while doing so. Updated permission so that user is able to edit profile picture --- > [!NOTE] > Ensures profile picture uploads succeed only with appropriate permissions and clearer errors. > > - Tightens `UploadProfilePicturePermissionGuard` to handle missing `workspace`, allow during workspace creation, and permit uploads when user has `WORKSPACE_MEMBERS` or `PROFILE_INFORMATION` settings; otherwise throws a `PermissionsException` with a user-friendly message > - In `user-workspace.resolver.ts`, validates the upload result and throws an error if no files were returned > > Written by [Cursor Bugbot](https://cursor.com/dashboard?tab=bugbot) for commit 3766bac15e340bdd467de3a9d923dbd697aab3db. This will update automatically on new commits. Configure [here](https://cursor.com/dashboard?tab=bugbot). --------- Co-authored-by: Félix Malfait --- .../guards/upload-profile-picture-permission.guard.ts | 11 +++++++++++ .../user-workspace/user-workspace.resolver.ts | 4 ++++ 2 files changed, 15 insertions(+) diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/guards/upload-profile-picture-permission.guard.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/guards/upload-profile-picture-permission.guard.ts index 55d6b54105..84b0267496 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/guards/upload-profile-picture-permission.guard.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/guards/upload-profile-picture-permission.guard.ts @@ -6,6 +6,7 @@ import { import { GqlExecutionContext } from '@nestjs/graphql'; import { msg } from '@lingui/core/macro'; +import { isDefined } from 'class-validator'; import { PermissionFlagType } from 'twenty-shared/constants'; import { WorkspaceActivationStatus } from 'twenty-shared/workspace'; @@ -24,6 +25,16 @@ export class UploadProfilePicturePermissionGuard implements CanActivate { const gqlContext = GqlExecutionContext.create(context); const request = gqlContext.getContext().req; + if (!isDefined(request.workspace)) { + throw new PermissionsException( + PermissionsExceptionMessage.PERMISSION_DENIED, + PermissionsExceptionCode.PERMISSION_DENIED, + { + userFriendlyMessage: msg`Workspace not found`, + }, + ); + } + const workspaceId = request.workspace.id; const userWorkspaceId = request.userWorkspaceId; const workspaceActivationStatus = request.workspace.activationStatus; diff --git a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.resolver.ts b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.resolver.ts index 147179a9cd..07383f9706 100644 --- a/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.resolver.ts +++ b/packages/twenty-server/src/engine/core-modules/user-workspace/user-workspace.resolver.ts @@ -38,6 +38,10 @@ export class UserWorkspaceResolver { workspaceId, }); + if (!files.length) { + throw new Error('Failed to upload profile picture'); + } + return files[0]; } }