Revert "Title::checkUserBlock should call User::isBlockedFrom for every action"
authorLegoktm <legoktm@member.fsf.org>
Mon, 3 Dec 2018 00:12:19 +0000 (00:12 +0000)
committerLegoktm <legoktm@member.fsf.org>
Mon, 3 Dec 2018 00:12:19 +0000 (00:12 +0000)
This reverts commit b1e4ca70b8e375d52c35b46fb3157fb852948263.

Introduced a breaking change, and didn't follow the deprecation policy.

Bug: T210953
Change-Id: I11806165912d9188261d3c4c37dbae5cfd2865ec

includes/Title.php
tests/phpunit/includes/TitlePermissionTest.php

index c151f4a..997063b 100644 (file)
@@ -2688,30 +2688,14 @@ class Title implements LinkTarget {
                }
 
                $useReplica = ( $rigor !== 'secure' );
-               $block = $user->getBlock( $useReplica );
-
-               // The block may explicitly allow an action (like "read" or "upload").
-               if ( $block && $block->prevents( $action ) === false ) {
-                       return $errors;
-               }
-
-               // Determine if the user is blocked from this action on this page.
-               try {
+               if ( ( $action == 'edit' || $action == 'create' )
+                       && !$user->isBlockedFrom( $this, $useReplica )
+               ) {
+                       // Don't block the user from editing their own talk page unless they've been
+                       // explicitly blocked from that too.
+               } elseif ( $user->isBlocked() && $user->getBlock()->prevents( $action ) !== false ) {
                        // @todo FIXME: Pass the relevant context into this function.
-                       $action = Action::factory( $action, WikiPage::factory( $this ), RequestContext::getMain() );
-               } catch ( Exception $e ) {
-                       $action = null;
-               }
-
-               // If no action object is returned, assume that the action requires unblock
-               // which is the default.
-               if ( !$action || $action->requiresUnblock() ) {
-                       if ( $user->isBlockedFrom( $this, $useReplica ) ) {
-                               // @todo FIXME: Pass the relevant context into this function.
-                               $errors[] = $block
-                                       ? $block->getPermissionsError( RequestContext::getMain() )
-                                       : [ 'badaccess-group0' ];
-                       }
+                       $errors[] = $user->getBlock()->getPermissionsError( RequestContext::getMain() );
                }
 
                return $errors;
index cb5e1f8..11b9c01 100644 (file)
@@ -1,6 +1,5 @@
 <?php
 
-use MediaWiki\Block\Restriction\PageRestriction;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -893,7 +892,7 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                        'wgEmailAuthentication' => true,
                ] );
 
-               $this->setUserPerm( [ 'createpage', 'edit', 'move', 'rollback', 'patrol', 'upload', 'purge' ] );
+               $this->setUserPerm( [ "createpage", "move" ] );
                $this->setTitle( NS_HELP, "test page" );
 
                # $wgEmailConfirmToEdit only applies to 'edit' action
@@ -965,24 +964,11 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                        'expiry' => 10,
                        'systemBlock' => 'test',
                ] );
-
-               $errors = [ [ 'systemblockedtext',
+               $this->assertEquals( [ [ 'systemblockedtext',
                                '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
                                'Useruser', 'test', '23:00, 31 December 1969', '127.0.8.1',
-                               $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
-
-               $this->assertEquals( $errors,
-                       $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
-               $this->assertEquals( $errors,
+                               $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ],
                        $this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
-               $this->assertEquals( $errors,
-                       $this->title->getUserPermissionsErrors( 'rollback', $this->user ) );
-               $this->assertEquals( $errors,
-                       $this->title->getUserPermissionsErrors( 'patrol', $this->user ) );
-               $this->assertEquals( $errors,
-                       $this->title->getUserPermissionsErrors( 'upload', $this->user ) );
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'purge', $this->user ) );
 
                // partial block message test
                $this->user->mBlockedby = $this->user->getName();
@@ -995,39 +981,10 @@ class TitlePermissionTest extends MediaWikiLangTestCase {
                        'expiry' => 10,
                ] );
 
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'rollback', $this->user ) );
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'patrol', $this->user ) );
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'upload', $this->user ) );
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'purge', $this->user ) );
-
-               $this->user->mBlock->setRestrictions( [
-                               ( new PageRestriction( 0, $this->title->getArticleID() ) )->setTitle( $this->title ),
-               ] );
-
-               $errors = [ [ 'blockedtext-partial',
+               $this->assertEquals( [ [ 'blockedtext-partial',
                                '[[User:Useruser|Useruser]]', 'no reason given', '127.0.0.1',
                                'Useruser', null, '23:00, 31 December 1969', '127.0.8.1',
-                               $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ];
-
-               $this->assertEquals( $errors,
-                       $this->title->getUserPermissionsErrors( 'edit', $this->user ) );
-               $this->assertEquals( $errors,
+                               $wgLang->timeanddate( wfTimestamp( TS_MW, $now ), true ) ] ],
                        $this->title->getUserPermissionsErrors( 'move-target', $this->user ) );
-               $this->assertEquals( $errors,
-                       $this->title->getUserPermissionsErrors( 'rollback', $this->user ) );
-               $this->assertEquals( $errors,
-                       $this->title->getUserPermissionsErrors( 'patrol', $this->user ) );
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'upload', $this->user ) );
-               $this->assertEquals( [],
-                       $this->title->getUserPermissionsErrors( 'purge', $this->user ) );
        }
 }