diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/hooks/useUpsertObjectPermission.ts b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/hooks/useUpsertObjectPermission.ts index e29b4439f45..2a7c085c570 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/hooks/useUpsertObjectPermission.ts +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/hooks/useUpsertObjectPermission.ts @@ -35,7 +35,7 @@ export const useUpsertObjectPermission = ({ roleId }: { roleId: string }) => { newPermissions.canReadObjectRecords = value; } - if (permissionKey === 'canReadObjectRecords' && !value) { + if (permissionKey === 'canReadObjectRecords' && value === false) { newPermissions.canUpdateObjectRecords = false; newPermissions.canSoftDeleteObjectRecords = false; newPermissions.canDestroyObjectRecords = false; diff --git a/packages/twenty-server/src/engine/metadata-modules/object-permission/object-permission.service.ts b/packages/twenty-server/src/engine/metadata-modules/object-permission/object-permission.service.ts index 92385599c06..0380a7e27ff 100644 --- a/packages/twenty-server/src/engine/metadata-modules/object-permission/object-permission.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/object-permission/object-permission.service.ts @@ -143,14 +143,21 @@ export class ObjectPermissionService { ); } else { const effectiveCanRead = - desired.canReadObjectRecords ?? current.canReadObjectRecords; + desired.canReadObjectRecords !== undefined + ? desired.canReadObjectRecords + : current.canReadObjectRecords; const effectiveCanUpdate = - desired.canUpdateObjectRecords ?? current.canUpdateObjectRecords; + desired.canUpdateObjectRecords !== undefined + ? desired.canUpdateObjectRecords + : current.canUpdateObjectRecords; const effectiveCanSoftDelete = - desired.canSoftDeleteObjectRecords ?? - current.canSoftDeleteObjectRecords; + desired.canSoftDeleteObjectRecords !== undefined + ? desired.canSoftDeleteObjectRecords + : current.canSoftDeleteObjectRecords; const effectiveCanDestroy = - desired.canDestroyObjectRecords ?? current.canDestroyObjectRecords; + desired.canDestroyObjectRecords !== undefined + ? desired.canDestroyObjectRecords + : current.canDestroyObjectRecords; const canChanged = effectiveCanRead !== current.canReadObjectRecords || @@ -279,26 +286,34 @@ export class ObjectPermissionService { newObjectPermission.objectMetadataId, ); + const resolvedCanRead = + newObjectPermission.canReadObjectRecords !== undefined + ? newObjectPermission.canReadObjectRecords + : existingObjectRecordPermission?.canReadObjectRecords; const hasReadPermissionAfterUpdate = - newObjectPermission.canReadObjectRecords ?? - existingObjectRecordPermission?.canReadObjectRecords ?? - flatRole.canReadAllObjectRecords; + resolvedCanRead ?? flatRole.canReadAllObjectRecords; if (hasReadPermissionAfterUpdate === false) { + const resolvedCanUpdate = + newObjectPermission.canUpdateObjectRecords !== undefined + ? newObjectPermission.canUpdateObjectRecords + : existingObjectRecordPermission?.canUpdateObjectRecords; const hasUpdatePermissionAfterUpdate = - newObjectPermission.canUpdateObjectRecords ?? - existingObjectRecordPermission?.canUpdateObjectRecords ?? - flatRole.canUpdateAllObjectRecords; + resolvedCanUpdate ?? flatRole.canUpdateAllObjectRecords; + const resolvedCanSoftDelete = + newObjectPermission.canSoftDeleteObjectRecords !== undefined + ? newObjectPermission.canSoftDeleteObjectRecords + : existingObjectRecordPermission?.canSoftDeleteObjectRecords; const hasSoftDeletePermissionAfterUpdate = - newObjectPermission.canSoftDeleteObjectRecords ?? - existingObjectRecordPermission?.canSoftDeleteObjectRecords ?? - flatRole.canSoftDeleteAllObjectRecords; + resolvedCanSoftDelete ?? flatRole.canSoftDeleteAllObjectRecords; + const resolvedCanDestroy = + newObjectPermission.canDestroyObjectRecords !== undefined + ? newObjectPermission.canDestroyObjectRecords + : existingObjectRecordPermission?.canDestroyObjectRecords; const hasDestroyPermissionAfterUpdate = - newObjectPermission.canDestroyObjectRecords ?? - existingObjectRecordPermission?.canDestroyObjectRecords ?? - flatRole.canDestroyAllObjectRecords; + resolvedCanDestroy ?? flatRole.canDestroyAllObjectRecords; if ( hasUpdatePermissionAfterUpdate ||