[TASK] Deprecate various methods inside BE_USER 58/58458/4
authorBenni Mack <benni@typo3.org>
Sat, 29 Sep 2018 14:26:08 +0000 (16:26 +0200)
committerSusanne Moog <susanne.moog@typo3.org>
Sat, 29 Sep 2018 17:15:35 +0000 (19:15 +0200)
The property "checkWorkspaceCurrent_cache" is now protected.

Second method argument of "modAccess()" is deprecated.

"isPSet()" is not in use anymore, and will be removed in TYPO3 v10.0.

Some other methods, which are workspace-related, are marked
as internal in order to properly move them into EXT:workspaces
in the next version.

Resolves: #86441
Releases: master
Change-Id: Ie776e71cdc7485937b2a38e7cfc93c13aba925ab
Reviewed-on: https://review.typo3.org/58458
Tested-by: TYPO3com <no-reply@typo3.com>
Reviewed-by: Frank Naegler <frank.naegler@typo3.org>
Tested-by: Frank Naegler <frank.naegler@typo3.org>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
typo3/sysext/backend/Classes/Http/RouteDispatcher.php
typo3/sysext/core/Classes/Authentication/BackendUserAuthentication.php
typo3/sysext/core/Documentation/Changelog/master/Deprecation-86441-VariousMethodsAndPropertiesInsideBackendUserAuthentication.rst [new file with mode: 0644]
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodArgumentDroppedMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/MethodCallMatcher.php
typo3/sysext/install/Configuration/ExtensionScanner/Php/PropertyProtectedMatcher.php

index 0ff0330..5e8c300 100644 (file)
@@ -139,8 +139,7 @@ class RouteDispatcher extends Dispatcher
         $backendUserAuthentication = $GLOBALS['BE_USER'];
 
         // Check permissions and exit if the user has no permission for entry
-        // @todo please do not use "true" here, what a bad coding paradigm
-        $backendUserAuthentication->modAccess($moduleConfiguration, true);
+        $backendUserAuthentication->modAccess($moduleConfiguration);
         $id = $request->getQueryParams()['id'] ?? $request->getParsedBody()['id'];
         if (MathUtility::canBeInterpretedAsInteger($id) && $id > 0) {
             $permClause = $backendUserAuthentication->getPagePermsClause(Permission::PAGE_SHOW);
index efe1f08..cdb3169 100644 (file)
@@ -58,6 +58,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
         'userTSUpdated' => 'Using $userTSUpdated of class BackendUserAuthentication from the outside is discouraged. This property is for class internal use only.',
         'userTS_text' => 'Using $userTS_text of class BackendUserAuthentication from the outside is discouraged. This property is for class internal use only.',
         'userTS_dontGetCached' => 'Using $userTS_dontGetCached of class BackendUserAuthentication is deprecated. The property will be removed in v10.',
+        'checkWorkspaceCurrent_cache' => 'Using $checkWorkspaceCurrent_cache of class BackendUserAuthentication is marked as internal, as its sole purpose is a runtime cache for internal calls.',
     ];
 
     /**
@@ -163,7 +164,8 @@ class BackendUserAuthentication extends AbstractUserAuthentication
     protected $userTSUpdated = false;
 
     /**
-     * @var bool @deprecated since v9, will be removed in v10. If true, parsed TSconfig will not be cached
+     * @var bool
+     * @deprecated since v9, will be removed in v10. If true, parsed TSconfig will not be cached
      */
     protected $userTS_dontGetCached = false;
 
@@ -177,7 +179,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      * Cache for checkWorkspaceCurrent()
      * @var array|null
      */
-    public $checkWorkspaceCurrent_cache;
+    protected $checkWorkspaceCurrent_cache;
 
     /**
      * @var \TYPO3\CMS\Core\Resource\ResourceStorage[]
@@ -352,11 +354,11 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      *
      * Bits for permissions, see $perms variable:
      *
-     * 1 - Show:       See/Copy page and the pagecontent.
-     * 16- Edit pagecontent: Change/Add/Delete/Move pagecontent.
-     * 2- Edit page: Change/Move the page, eg. change title, startdate, hidden.
-     * 4- Delete page: Delete the page and pagecontent.
-     * 8- New pages: Create new pages under the page.
+     * 1  - Show:             See/Copy page and the pagecontent.
+     * 2  - Edit page:        Change/Move the page, eg. change title, startdate, hidden.
+     * 4  - Delete page:      Delete the page and pagecontent.
+     * 8  - New pages:        Create new pages under the page.
+     * 16 - Edit pagecontent: Change/Add/Delete/Move pagecontent.
      *
      * @param array $row Is the pagerow for which the permissions is checked
      * @param int $perms Is the binary representation of the permission we are going to check. Every bit in this number represents a permission that must be set. See function explanation.
@@ -417,12 +419,18 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      * Checks access to a backend module with the $MCONF passed as first argument
      *
      * @param array $conf $MCONF array of a backend module!
-     * @param bool $exitOnError If set, an array will issue an error message and exit.
+     * @param bool $exitOnError If set, an array will issue an error message and exit. @deprecated will be removed in TYPO3 v10.0. and exceptions will always be caught. In TYPO3 v10.0. Custom permission-based Exceptions should be thrown.
      * @throws \RuntimeException
      * @return bool Will return TRUE if $MCONF['access'] is not set at all, if the BE_USER is admin or if the module is enabled in the be_users/be_groups records of the user (specifically enabled). Will return FALSE if the module name is not even found in $TBE_MODULES
      */
-    public function modAccess($conf, $exitOnError)
+    public function modAccess($conf, $exitOnError = null)
     {
+        if ($exitOnError !== null) {
+            trigger_error('Calling BackendUserAuthentication->modAccess() with a second argument is deprecated, as the default behaviour is throwing exceptions, which might get customized in TYPO3 v10.0. Remove the second argument within modAccess() to avoid the deprecation, and ensure to catch the Exception in the callers code.', E_USER_DEPRECATED);
+        } else {
+            // new default behaviour (true by default when no second parameter given)
+            $exitOnError = true;
+        }
         if (!BackendUtility::isModuleSetInTBE_MODULES($conf['name'])) {
             if ($exitOnError) {
                 throw new \RuntimeException('Fatal Error: This module "' . $conf['name'] . '" is not enabled in TBE_MODULES', 1294586446);
@@ -432,7 +440,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
         // Workspaces check:
         if (
             !empty($conf['workspaces'])
-            && \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('workspaces')
+            && ExtensionManagementUtility::isLoaded('workspaces')
             && ($this->workspace !== 0 || !GeneralUtility::inList($conf['workspaces'], 'online'))
             && ($this->workspace !== -1 || !GeneralUtility::inList($conf['workspaces'], 'offline'))
             && ($this->workspace <= 0 || !GeneralUtility::inList($conf['workspaces'], 'custom'))
@@ -894,10 +902,11 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      * @param string $tableName Is the tablename to check: If "pages" table then edit,new,delete and editcontent permissions can be checked. Other tables will be checked for "editcontent" only (and $type will be ignored)
      * @param string $actionType For $tableName='pages' this can be 'edit' (2), 'new' (8 or 16), 'delete' (4), 'editcontent' (16). For all other tables this is ignored. (16 is used)
      * @return bool
-     * @access public (used by ClickMenuController)
+     * @deprecated since TYPO3 v9.5, will be removed in TYPO3 v10.0.
      */
     public function isPSet($compiledPermissions, $tableName, $actionType = '')
     {
+        trigger_error('BackendUserAuthentication->isPSet() will be removed in TYPO3 v10.0. Use doesUserHaveAccess() and calcPerms()', E_USER_DEPRECATED);
         if ($this->isAdmin()) {
             $result = true;
         } elseif ($tableName === 'pages') {
@@ -999,6 +1008,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      * @param array|int $recData Integer (record uid) or array where fields are at least: pid, t3ver_wsid, t3ver_stage (if versioningWS is set)
      * @return string String error code, telling the failure state. FALSE=All ok
      * @see workspaceCannotEditRecord()
+     * @internal this method will be moved to EXT:workspaces
      */
     public function workspaceCannotEditOfflineVersion($table, $recData)
     {
@@ -1105,7 +1115,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
         if ($this->isAdmin()) {
             return true;
         }
-        if ($this->workspace !== 0 && \TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('workspaces')) {
+        if ($this->workspace !== 0 && ExtensionManagementUtility::isLoaded('workspaces')) {
             $stage = (int)$stage;
             $stat = $this->checkWorkspaceCurrent();
             // Check if custom staging is activated
@@ -1162,6 +1172,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      *
      * @param int $wsid Workspace UID; 0,1+
      * @return bool Returns TRUE if the user has access to publish content from the workspace ID given.
+     * @internal this method will be moved to EXT:workspaces
      */
     public function workspacePublishAccess($wsid)
     {
@@ -1193,6 +1204,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      * Workspace swap-mode access?
      *
      * @return bool Returns TRUE if records can be swapped in the current workspace, otherwise FALSE
+     * @internal this method will be moved to EXT:workspaces
      */
     public function workspaceSwapAccess()
     {
@@ -1225,7 +1237,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
             return $this->userTS;
         }
 
-        trigger_error('Handing over arguments to getTSConfig() is deprecated, they will be removed in v10.', E_USER_DEPRECATED);
+        trigger_error('Handing over arguments to BackendUserAuthentication->getTSConfig() is deprecated, they will be removed in v10.', E_USER_DEPRECATED);
 
         if (!is_array($config)) {
             // Getting Root-ts if not sent
@@ -1254,11 +1266,11 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      * @param string $objectString Object string, eg. "somestring.someproperty.somesubproperty
      * @return string The value for that object string (object path)
      * @see getTSConfig()
-     * @deprecated since core v9, will be removed with core v10
+     * @deprecated since TYPO3 v9, will be removed with TYPO3 v10
      */
     public function getTSConfigVal($objectString)
     {
-        trigger_error('This getTSConfigVal() will be removed in TYPO3 v10. Use getTSConfig() instead.', E_USER_DEPRECATED);
+        trigger_error('BackendUserAuthentication->getTSConfigVal() will be removed in TYPO3 v10. Use getTSConfig() instead.', E_USER_DEPRECATED);
         $TSConf = $this->getTSConfig($objectString);
         return $TSConf['value'];
     }
@@ -1269,11 +1281,11 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      * @param string $objectString Object string, eg. "somestring.someproperty.somesubproperty
      * @return array The properties for that object string (object path) - if any
      * @see getTSConfig()
-     * @deprecated since core v9, will be removed with core v10
+     * @deprecated since TYPO3 v9, will be removed with TYPO3 v10
      */
     public function getTSConfigProp($objectString)
     {
-        trigger_error('This getTSConfigProp() will be removed in TYPO3 v10. Use getTSConfig() instead.', E_USER_DEPRECATED);
+        trigger_error('BackendUserAuthentication->getTSConfigProp() will be removed in TYPO3 v10. Use getTSConfig() instead.', E_USER_DEPRECATED);
         $TSConf = $this->getTSConfig($objectString);
         return $TSConf['properties'];
     }
@@ -1359,7 +1371,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
             // Default TSconfig for admin-users
             if ($this->isAdmin()) {
                 $this->TSdataArray[] = 'admPanel.enable.all = 1';
-                if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('sys_note')) {
+                if (ExtensionManagementUtility::isLoaded('sys_note')) {
                     $this->TSdataArray[] = '
                                                        // Setting defaults for sys_note author / email...
                                                TCAdefaults.sys_note.author = ' . $this->user['realName'] . '
@@ -2052,11 +2064,11 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      *
      * @param string $str The text to wrap in comment prefixes and delimiters.
      * @return string TypoScript comment with the string text inside.
-     * @deprecated since core v9, will be removed with core v10
+     * @deprecated since TYPO3 v9, will be removed with TYPO3 v10
      */
     public function addTScomment($str)
     {
-        trigger_error('This method will be removed in TYPO3 v10.', E_USER_DEPRECATED);
+        trigger_error('BackendUserAuthentication->addTScomment() will be removed in TYPO3 v10.', E_USER_DEPRECATED);
         $delimiter = '# ***********************************************';
         $out = $delimiter . LF;
         $lines = GeneralUtility::trimExplode(LF, $str);
@@ -2130,7 +2142,7 @@ class BackendUserAuthentication extends AbstractUserAuthentication
                     $wsRec = ['uid' => $wsRec];
                     break;
                 default:
-                    if (\TYPO3\CMS\Core\Utility\ExtensionManagementUtility::isLoaded('workspaces')) {
+                    if (ExtensionManagementUtility::isLoaded('workspaces')) {
                         $queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable('sys_workspace');
                         $queryBuilder->getRestrictions()->add(GeneralUtility::makeInstance(RootLevelRestriction::class));
                         $wsRec = $queryBuilder->select(...GeneralUtility::trimExplode(',', $fields))
@@ -2376,11 +2388,11 @@ class BackendUserAuthentication extends AbstractUserAuthentication
      * @param string $extKey Option extension key / module name
      * @param int $error Error level. 0 = message, 1 = error (user problem), 2 = System Error (which should not happen), 3 = security notice (admin)
      * @return int Log entry UID
-     * @deprecated since core v9, will be removed with core v10
+     * @deprecated since TYPO3 v9, will be removed with TYPO3 v10
      */
     public function simplelog($message, $extKey = '', $error = 0)
     {
-        trigger_error('This method will be removed in TYPO3 v10.', E_USER_DEPRECATED);
+        trigger_error('BackendUserAuthentication->simplelog() will be removed in TYPO3 v10. Use writelog, or better, PSR-3 based logging instead.', E_USER_DEPRECATED);
         return $this->writelog(4, 0, $error, 0, ($extKey ? '[' . $extKey . '] ' : '') . $message, []);
     }
 
diff --git a/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86441-VariousMethodsAndPropertiesInsideBackendUserAuthentication.rst b/typo3/sysext/core/Documentation/Changelog/master/Deprecation-86441-VariousMethodsAndPropertiesInsideBackendUserAuthentication.rst
new file mode 100644 (file)
index 0000000..829a0bb
--- /dev/null
@@ -0,0 +1,45 @@
+.. include:: ../../Includes.txt
+
+=====================================================================================
+Deprecation: #86441 - Various methods and properties inside BackendUserAuthentication
+=====================================================================================
+
+See :issue:`86441`
+
+Description
+===========
+
+Some minor changes have been made with :php:`TYPO3\CMS\Core\Authentication\BackendUserAuthentication` in order
+to continue cleaning up the code.
+
+The property :php:`checkWorkspaceCurrent_cache` has been marked as protected, as it is an internal cache.
+
+The second argument of method :php:`modAccess()` has been marked as deprecated, as the method should not trigger runtime exceptions anymore.
+
+The method :php:`isPSet()` has been marked as deprecated.
+
+The following - mostly workspaces-related - methods have been marked as "internal":
+- :php:`workspaceCannotEditOfflineVersion()`
+- :php:`workspacePublishAccess()`
+- :php:`workspaceSwapAccess()`
+- :php:`workspaceCannotEditOfflineVersion()`
+
+
+Impact
+======
+
+Calling the deprecated method or the protected property will now trigger a PHP deprecation message.
+
+
+Affected Installations
+======================
+
+TYPO3 installations with enhanced workspace or permission functionality.
+
+
+Migration
+=========
+
+Avoid using the methods, and re-implement the functionality on your own, if necessary.
+
+.. index:: Frontend, FullyScanned
\ No newline at end of file
index 3473cb9..2e10804 100644 (file)
@@ -207,4 +207,11 @@ return [
             'Deprecation-85806-SecondArgumentOfPageRendereraddInlineLanguageLabelArray.rst',
         ],
     ],
+    'TYPO3\CMS\Core\Authentication\BackendUserAuthentication->modAccess' => [
+        'numberOfMandatoryArguments' => 1,
+        'maximumNumberOfArguments' => 2,
+        'restFiles' => [
+            'Deprecation-86441-VariousMethodsAndPropertiesInsideBackendUserAuthentication.rst'
+        ],
+    ],
 ];
index 2a9bb96..8b32b6d 100644 (file)
@@ -3635,4 +3635,11 @@ return [
             'Deprecation-86433-VariousStdWrapFunctionsAndContentObjectRenderer-relatedMethods.rst'
         ],
     ],
+    'TYPO3\CMS\Core\Authentication\BackendUserAuthentication->isPSet' => [
+        'numberOfMandatoryArguments' => 2,
+        'maximumNumberOfArguments' => 3,
+        'restFiles' => [
+            'Deprecation-86441-VariousMethodsAndPropertiesInsideBackendUserAuthentication.rst'
+        ],
+    ],
 ];
index 3de0627..a2cc191 100644 (file)
@@ -932,4 +932,9 @@ return [
             'Deprecation-86320-MarkInternalTSFEPropertiesAsProtected.rst',
         ],
     ],
+    'TYPO3\CMS\Core\Authentication\BackendUserAuthentication->checkWorkspaceCurrent_cache' => [
+        'restFiles' => [
+            'Deprecation-86441-VariousMethodsAndPropertiesInsideBackendUserAuthentication.rst'
+        ],
+    ],
 ];