diff --git a/react/src/components/FolderCreateModalV2.tsx b/react/src/components/FolderCreateModalV2.tsx index 6cce72b567..020e8e6e0d 100644 --- a/react/src/components/FolderCreateModalV2.tsx +++ b/react/src/components/FolderCreateModalV2.tsx @@ -649,17 +649,18 @@ const FolderCreateModalV2: React.FC = ({ {({ getFieldValue }) => { const usageMode = getFieldValue('usage_mode'); const type = getFieldValue('type'); - const allowOnlyROForModelProjectFolder = baiClient?.supports( - 'allow-only-ro-permission-for-model-project-folder', - ); + // Model project folders are forced read-only (FR-1290). The + // manager used to enforce this server-side (the dropped + // 'allow-only-ro-permission-for-model-project-folder' capability) + // and no longer seems to, but we keep enforcing it on the client + // to preserve that contract until the project-folder behavior is + // reworked. Mirrored in VFolderNodeDescriptionV2. const shouldDisableRWPermission = - usageMode === 'model' && - type === 'project' && - allowOnlyROForModelProjectFolder; + usageMode === 'model' && type === 'project'; return ( = ({ ? 'rw' : 'ro'; + // Model project folders are read-only by design (FR-1290), matching + // FolderCreateModalV2. The manager used to enforce `ro` server-side and no + // longer seems to, but we keep enforcing it on the client to preserve that + // contract until the project-folder behavior is reworked. + const shouldDisableRWPermission = + vfolderNode.metadata?.usageMode === 'MODEL' && + vfolderNode.accessControl?.ownershipType === 'GROUP'; + const items: DescriptionsProps['items'] = filterOutEmpty([ !vfolderNode?.unmanagedPath && { key: 'path', @@ -198,9 +207,27 @@ const VFolderNodeDescriptionV2: React.FC = ({ defaultValue={currentSelectPermission} options={[ { value: 'ro', label: t('data.ReadOnly') }, - { value: 'rw', label: t('data.ReadWrite') }, + { + value: 'rw', + label: shouldDisableRWPermission ? ( + + {t('data.ReadWrite')} + + ) : ( + t('data.ReadWrite') + ), + disabled: shouldDisableRWPermission, + }, ]} onChange={(value) => { + // Defense-in-depth: never persist 'rw' for a restricted folder. + if (shouldDisableRWPermission && value === 'rw') { + return; + } updateMutation.mutate( { permission: value, id: vfolderId }, {