diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTable.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTable.tsx index e3348664bf..6588448cfe 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTable.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTable.tsx @@ -145,6 +145,10 @@ export const SettingsRolePermissionsObjectLevelObjectFieldPermissionTable = ({ fieldPermissions={fieldPermissions} objectMetadataItem={objectMetadataItem} roleId={roleId} + isLabelIdentifier={ + objectMetadataItem.labelIdentifierFieldMetadataId === + fieldMetadataItem.id + } /> ))} diff --git a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow.tsx b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow.tsx index e192362879..9236bc19f1 100644 --- a/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow.tsx +++ b/packages/twenty-front/src/modules/settings/roles/role-permissions/object-level-permissions/field-permissions/components/SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow.tsx @@ -39,6 +39,7 @@ type SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRowProps = { objectMetadataItem: ObjectMetadataItem; fieldPermissions: FieldPermission[]; roleId: string; + isLabelIdentifier: boolean; }; export const SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow = @@ -47,6 +48,7 @@ export const SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow = fieldPermissions, objectMetadataItem, roleId, + isLabelIdentifier, }: SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRowProps) => { const theme = useTheme(); const { getIcon } = useIcons(); @@ -132,7 +134,8 @@ export const SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow = const isReadRestricted = hasRestriction && - fieldPermissionForThisFieldMetadataItem?.canReadFieldValue === false; + fieldPermissionForThisFieldMetadataItem?.canReadFieldValue === false && + !isLabelIdentifier; const isUpdateRestricted = hasRestriction && @@ -184,7 +187,9 @@ export const SettingsRolePermissionsObjectLevelObjectFieldPermissionTableRow = {shouldShowSeeTableHeader && ( , ) {} @@ -126,6 +128,14 @@ export class ObjectMetadataServiceV2 { ); } + if (isDefined(updateObjectInput.update.labelIdentifierFieldMetadataId)) { + await this.workspacePermissionsCacheService.recomputeRolesPermissionsCache( + { + workspaceId, + }, + ); + } + return fromFlatObjectMetadataToObjectMetadataDto(updatedFlatObjectMetadata); } diff --git a/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service.ts b/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service.ts index 45f347260f..f0a01348ff 100644 --- a/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service.ts +++ b/packages/twenty-server/src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache.service.ts @@ -13,7 +13,6 @@ import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadat import { PermissionFlagType } from 'src/engine/metadata-modules/permissions/constants/permission-flag-type.constants'; import { RoleTargetsEntity } from 'src/engine/metadata-modules/role/role-targets.entity'; import { RoleEntity } from 'src/engine/metadata-modules/role/role.entity'; -import { WorkspaceFeatureFlagsMapCacheService } from 'src/engine/metadata-modules/workspace-feature-flags-map-cache/workspace-feature-flags-map-cache.service'; import { type UserWorkspaceRoleMap } from 'src/engine/metadata-modules/workspace-permissions-cache/types/user-workspace-role-map.type'; import { WorkspacePermissionsCacheStorageService } from 'src/engine/metadata-modules/workspace-permissions-cache/workspace-permissions-cache-storage.service'; import { TwentyORMExceptionCode } from 'src/engine/twenty-orm/exceptions/twenty-orm.exception'; @@ -45,7 +44,6 @@ export class WorkspacePermissionsCacheService { @InjectRepository(RoleTargetsEntity) private readonly roleTargetsRepository: Repository, private readonly workspacePermissionsCacheStorageService: WorkspacePermissionsCacheStorageService, - private readonly workspaceFeatureFlagsMapCacheService: WorkspaceFeatureFlagsMapCacheService, ) {} async recomputeRolesPermissionsCache({ @@ -249,12 +247,18 @@ export class WorkspacePermissionsCacheService { ); for (const fieldPermission of fieldPermissions) { + const isFieldLabelIdentifier = + fieldPermission.fieldMetadataId === + objectMetadata.labelIdentifierFieldMetadataId; + if ( isDefined(fieldPermission.canReadFieldValue) || isDefined(fieldPermission.canUpdateFieldValue) ) { restrictedFields[fieldPermission.fieldMetadataId] = { - canRead: fieldPermission.canReadFieldValue, + canRead: isFieldLabelIdentifier + ? true + : fieldPermission.canReadFieldValue, canUpdate: fieldPermission.canUpdateFieldValue, }; } @@ -283,7 +287,12 @@ export class WorkspacePermissionsCacheService { where: { workspaceId, }, - select: ['id', 'isSystem', 'standardId'], + select: [ + 'id', + 'isSystem', + 'standardId', + 'labelIdentifierFieldMetadataId', + ], }); return workspaceObjectMetadata;