From eb72b0a119be2c276e21e39b7d350d1328e2d8e7 Mon Sep 17 00:00:00 2001 From: Daniel Siepmann Date: Thu, 25 Jan 2024 11:57:49 +0100 Subject: [PATCH] [BUGFIX] Properly initialize backend user for requests Default requests won't have a workspace id. That will lead to TYPO3 defaults -99 id. That in turn will lead to being in preview mode once a backend user is provided within context. We therefore cover the default and turn it into live workspace which could be the expected default. Also we add missing initialization for backend user. Resolves: #535 --- .../Classes/Middleware/BackendUserHandler.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Resources/Core/Functional/Extensions/json_response/Classes/Middleware/BackendUserHandler.php b/Resources/Core/Functional/Extensions/json_response/Classes/Middleware/BackendUserHandler.php index dde7afa1..11bf09bf 100644 --- a/Resources/Core/Functional/Extensions/json_response/Classes/Middleware/BackendUserHandler.php +++ b/Resources/Core/Functional/Extensions/json_response/Classes/Middleware/BackendUserHandler.php @@ -40,7 +40,7 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface /** @var InternalRequestContext $internalRequestContext */ $internalRequestContext = $request->getAttribute('typo3.testing.context'); $backendUserId = $internalRequestContext->getBackendUserId(); - $workspaceId = $internalRequestContext->getWorkspaceId(); + $workspaceId = $internalRequestContext->getWorkspaceId() ?? 0; if ((int)$backendUserId === 0) { // Skip if $backendUserId is invalid, typically null or 0 @@ -55,10 +55,10 @@ public function process(ServerRequestInterface $request, RequestHandlerInterface // Init backend user if found in database $backendUser = GeneralUtility::makeInstance(FrontendBackendUserAuthentication::class); $backendUser->user = $row; - if ($workspaceId !== null) { - // Force backend user into given workspace, can be 0, too. - $backendUser->setTemporaryWorkspace($workspaceId); - } + $backendUser->uc = isset($row['uc']) ? unserialize($row['uc']) : []; + $backendUser->initializeUserSessionManager(); + $backendUser->fetchGroupData(); + $backendUser->setTemporaryWorkspace($workspaceId); $GLOBALS['BE_USER'] = $backendUser; $this->setBackendUserAspect(GeneralUtility::makeInstance(Context::class), $backendUser); }