diff --git a/typo3/sysext/backend/Classes/View/Drawing/BackendLayoutRenderer.php b/typo3/sysext/backend/Classes/View/Drawing/BackendLayoutRenderer.php index e2b6b9aaa2c15155a8cad1441b365fa695ddf48d..8dd5eb60b3526e2bb190ba3b63bd6580e5a08fad 100644 --- a/typo3/sysext/backend/Classes/View/Drawing/BackendLayoutRenderer.php +++ b/typo3/sysext/backend/Classes/View/Drawing/BackendLayoutRenderer.php @@ -35,6 +35,7 @@ use TYPO3\CMS\Core\Localization\LanguageService; use TYPO3\CMS\Core\Messaging\FlashMessage; use TYPO3\CMS\Core\Messaging\FlashMessageService; use TYPO3\CMS\Core\Page\PageRenderer; +use TYPO3\CMS\Core\Type\Bitmask\Permission; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Mvc\Controller\ControllerContext; use TYPO3\CMS\Extbase\Mvc\Request; @@ -220,7 +221,7 @@ class BackendLayoutRenderer $this->clipboard->endClipboard(); $elFromTable = $this->clipboard->elFromTable('tt_content'); - if (!empty($elFromTable) && $this->context->isPageEditable()) { + if (!empty($elFromTable) && $this->isContentEditable()) { $pasteItem = (int)substr(key($elFromTable), 11); $pasteRecord = BackendUtility::getRecord('tt_content', (int)$pasteItem); $pasteTitle = (string)($pasteRecord['header'] ?: $pasteItem); @@ -265,6 +266,18 @@ class BackendLayoutRenderer return $pasteIcon; } + protected function isContentEditable(): bool + { + if ($this->getBackendUser()->isAdmin()) { + return true; + } + + $pageRecord = $this->context->getPageRecord(); + return !$pageRecord['editlock'] + && $this->getBackendUser()->check('tables_modify', 'tt_content') + && $this->getBackendUser()->doesUserHaveAccess($pageRecord, Permission::CONTENT_EDIT); + } + protected function getBackendUser(): BackendUserAuthentication { return $GLOBALS['BE_USER']; diff --git a/typo3/sysext/backend/Classes/View/PageLayoutView.php b/typo3/sysext/backend/Classes/View/PageLayoutView.php index 55609547a7ccadcd831ea01eb898597ef89752d4..cd1c81dd52defdb82a2287aebfe27eb8c4fc9dad 100644 --- a/typo3/sysext/backend/Classes/View/PageLayoutView.php +++ b/typo3/sysext/backend/Classes/View/PageLayoutView.php @@ -648,7 +648,7 @@ class PageLayoutView implements LoggerAwareInterface } } $elFromTable = $this->clipboard->elFromTable('tt_content'); - if (!empty($elFromTable) && $this->isPageEditable()) { + if (!empty($elFromTable) && $this->isContentEditable()) { $pasteItem = substr(key($elFromTable), 11); $pasteRecord = BackendUtility::getRecord('tt_content', (int)$pasteItem); $pasteTitle = $pasteRecord['header'] ?: $pasteItem;