diff --git a/packages/server/src/enterprise/rbac/Permissions.ts b/packages/server/src/enterprise/rbac/Permissions.ts index 1fb9e6fccbf..9ba33a88e2e 100644 --- a/packages/server/src/enterprise/rbac/Permissions.ts +++ b/packages/server/src/enterprise/rbac/Permissions.ts @@ -88,6 +88,7 @@ export class Permissions { const executionsCategory = new PermissionCategory('executions') executionsCategory.addPermission(new Permission('executions:view', 'View', true, true, true)) + executionsCategory.addPermission(new Permission('executions:update', 'Update', true, true, true)) executionsCategory.addPermission(new Permission('executions:delete', 'Delete', true, true, true)) this.categories.push(executionsCategory) diff --git a/packages/server/src/routes/executions/index.ts b/packages/server/src/routes/executions/index.ts index 6106613a19c..1b9458f625c 100644 --- a/packages/server/src/routes/executions/index.ts +++ b/packages/server/src/routes/executions/index.ts @@ -8,7 +8,7 @@ router.get('/', checkAnyPermission('executions:view'), executionController.getAl router.get(['/', '/:id'], checkAnyPermission('executions:view'), executionController.getExecutionById) // PUT -router.put(['/', '/:id'], executionController.updateExecution) +router.put(['/', '/:id'], checkAnyPermission('executions:update'), executionController.updateExecution) // DELETE - single execution or multiple executions router.delete('/:id', checkAnyPermission('executions:delete'), executionController.deleteExecutions) diff --git a/packages/ui/src/views/agentexecutions/ExecutionDetails.jsx b/packages/ui/src/views/agentexecutions/ExecutionDetails.jsx index c89a1130f01..e89b4c81067 100644 --- a/packages/ui/src/views/agentexecutions/ExecutionDetails.jsx +++ b/packages/ui/src/views/agentexecutions/ExecutionDetails.jsx @@ -49,6 +49,9 @@ import executionsApi from '@/api/executions' // Hooks import useApi from '@/hooks/useApi' +// RBAC +import { Available } from '@/ui-component/rbac/available' + const getIconColor = (status) => { switch (status) { case 'FINISHED': @@ -768,21 +771,23 @@ export const ExecutionDetails = ({ open, isPublic, execution, metadata, onClose, )} {!isPublic && !localMetadata.isPublic && ( - - ) : ( - - ) - } - variant='outlined' - label={updateExecutionApi.loading ? 'Updating...' : 'Share'} - className={'button'} - onClick={() => onSharePublicly()} - disabled={updateExecutionApi.loading} - /> + + + ) : ( + + ) + } + variant='outlined' + label={updateExecutionApi.loading ? 'Updating...' : 'Share'} + className={'button'} + onClick={() => onSharePublicly()} + disabled={updateExecutionApi.loading} + /> + )} {!isPublic && localMetadata.isPublic && ( diff --git a/packages/ui/src/views/agentexecutions/ShareExecutionDialog.jsx b/packages/ui/src/views/agentexecutions/ShareExecutionDialog.jsx index b35635f7c28..6a3dbebf1cb 100644 --- a/packages/ui/src/views/agentexecutions/ShareExecutionDialog.jsx +++ b/packages/ui/src/views/agentexecutions/ShareExecutionDialog.jsx @@ -14,6 +14,7 @@ import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackba // API import executionsApi from '@/api/executions' import useApi from '@/hooks/useApi' +import { Available } from '@/ui-component/rbac/available' const ShareExecutionDialog = ({ show, executionId, onClose, onUnshare }) => { const portalElement = document.getElementById('portal') @@ -104,9 +105,11 @@ const ShareExecutionDialog = ({ show, executionId, onClose, onUnshare }) => { {/* Actions */} - + + +