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 */}
-
+
+
+