Deprecation: #108568 - BackendUserAuthentication::recordEditAccessInternals() and $errorMsg 

See forge#108568

Description 

The method BackendUserAuthentication::recordEditAccessInternals() and the property BackendUserAuthentication::$errorMsg of class \TYPO3\CMS\Core\Authentication\BackendUserAuthentication have been deprecated.

They represented an anti-pattern in which the method returned a boolean value but communicated error details through a class property, making the API difficult to use and test.

A new method checkRecordEditAccess() has been introduced. It returns an \TYPO3\CMS\Core\Authentication\AccessCheckResult value object containing both the access decision and any error messages.

Impact 

Calling the deprecated method recordEditAccessInternals() or accessing the deprecated property $errorMsg will trigger a deprecation-level log entry and will stop working in TYPO3 v15.0.

The extension scanner reports usages as a strong match.

Affected installations 

Instances or extensions that directly call recordEditAccessInternals() or access the $errorMsg property.

Migration 

Replace calls to recordEditAccessInternals() with checkRecordEditAccess(). The new method returns a \TYPO3\CMS\Core\Authentication\AccessCheckResult object with two public properties:

  • isAllowed - Boolean indicating whether access is granted
  • errorMessage - String containing the error message. It is empty if access is granted

Before 

use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;

$backendUser = $this->getBackendUser();
if ($backendUser->recordEditAccessInternals($table, $record)) {
    // Access granted
} else {
    // Access denied, error message is in $backendUser->errorMsg
    $errorMessage = $backendUser->errorMsg;
}
Copied!

After 

use TYPO3\CMS\Core\Authentication\BackendUserAuthentication;

$backendUser = $this->getBackendUser();
$accessResult = $backendUser->checkRecordEditAccess($table, $record);
if ($accessResult->isAllowed) {
    // Access granted
} else {
    // Access denied
    $errorMessage = $accessResult->errorMessage;
}
Copied!