diff --git a/typo3/sysext/backend/Classes/Controller/Page/TreeController.php b/typo3/sysext/backend/Classes/Controller/Page/TreeController.php index 685305ed91acfd877398333a5f382fd47ab901fd..c98f2912e031cd8fad6b698d033d41e285550566 100644 --- a/typo3/sysext/backend/Classes/Controller/Page/TreeController.php +++ b/typo3/sysext/backend/Classes/Controller/Page/TreeController.php @@ -116,6 +116,7 @@ class TreeController { $configuration = [ 'allowRecursiveDelete' => !empty($this->getBackendUser()->uc['recursiveDelete']), + 'allowDragMove' => $this->isDragMoveAllowed(), 'doktypes' => $this->getDokTypes(), 'displayDeleteConfirmation' => $this->getBackendUser()->jsConfirmation(JsConfirmation::DELETE), 'temporaryMountPoint' => $this->getMountPointPath((int)($this->getBackendUser()->uc['pageTree_temporaryMountPoint'] ?? 0)), @@ -507,6 +508,18 @@ class TreeController return implode(' ', $classes); } + /** + * Check if drag-move in the svg tree is allowed for the user + * + * @return bool + */ + protected function isDragMoveAllowed(): bool + { + $backendUser = $this->getBackendUser(); + return $backendUser->isAdmin() + || ($backendUser->check('tables_modify', 'pages') && $backendUser->checkLanguageAccess(0)); + } + /** * @return WorkspaceService */ diff --git a/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTree.js b/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTree.js index 5d9f31ab1277b7f21b99d580e08846929dcf044b..e08f5f67a004fc1e201aa2b48a7b60392cd5dd89 100644 --- a/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTree.js +++ b/typo3/sysext/backend/Resources/Public/JavaScript/PageTree/PageTree.js @@ -66,7 +66,7 @@ define(['jquery', return false; } - _this.settings.isDragAnDrop = true; + _this.settings.isDragAnDrop = settings.allowDragMove; _this.dispatch.on('nodeSelectedAfter.pageTree', _this.nodeSelectedAfter); _this.dispatch.on('nodeRightClick.pageTree', _this.nodeRightClick); _this.dispatch.on('contextmenu.pageTree', _this.contextmenu);