WMDE-leszek has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/363305 )

Change subject: Use EntityPermissionChecker for checking term modify 
permissions on relevant Special pages
......................................................................

Use EntityPermissionChecker for checking term modify permissions on relevant 
Special pages

Bug: T166586
Change-Id: I3da1c9dbf68948c119a01790784f38a48c66ff26
---
M repo/Wikibase.php
M repo/includes/Specials/SpecialModifyTerm.php
M repo/includes/Specials/SpecialSetAliases.php
M repo/includes/Specials/SpecialSetDescription.php
M repo/includes/Specials/SpecialSetLabel.php
M repo/includes/Specials/SpecialSetLabelDescriptionAliases.php
M repo/tests/phpunit/includes/Specials/SpecialSetAliasesTest.php
M repo/tests/phpunit/includes/Specials/SpecialSetDescriptionTest.php
M repo/tests/phpunit/includes/Specials/SpecialSetLabelDescriptionAliasesTest.php
M repo/tests/phpunit/includes/Specials/SpecialSetLabelTest.php
10 files changed, 65 insertions(+), 24 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/05/363305/1

diff --git a/repo/Wikibase.php b/repo/Wikibase.php
index ca66bbd..be051fb 100644
--- a/repo/Wikibase.php
+++ b/repo/Wikibase.php
@@ -791,7 +791,8 @@
                        $wikibaseRepo->getSummaryFormatter(),
                        $wikibaseRepo->getEntityRevisionLookup( 'uncached' ),
                        $wikibaseRepo->getEntityTitleLookup(),
-                       $wikibaseRepo->newEditEntityFactory()
+                       $wikibaseRepo->newEditEntityFactory(),
+                       $wikibaseRepo->getEntityPermissionChecker()
                );
        };
        $wgSpecialPages['SetDescription'] = function() {
@@ -809,7 +810,8 @@
                        $wikibaseRepo->getSummaryFormatter(),
                        $wikibaseRepo->getEntityRevisionLookup( 'uncached' ),
                        $wikibaseRepo->getEntityTitleLookup(),
-                       $wikibaseRepo->newEditEntityFactory()
+                       $wikibaseRepo->newEditEntityFactory(),
+                       $wikibaseRepo->getEntityPermissionChecker()
                );
        };
        $wgSpecialPages['SetAliases'] = function() {
@@ -827,7 +829,8 @@
                        $wikibaseRepo->getSummaryFormatter(),
                        $wikibaseRepo->getEntityRevisionLookup( 'uncached' ),
                        $wikibaseRepo->getEntityTitleLookup(),
-                       $wikibaseRepo->newEditEntityFactory()
+                       $wikibaseRepo->newEditEntityFactory(),
+                       $wikibaseRepo->getEntityPermissionChecker()
                );
        };
        $wgSpecialPages['SetLabelDescriptionAliases'] = function() {
@@ -847,7 +850,8 @@
                        $wikibaseRepo->getEntityTitleLookup(),
                        $wikibaseRepo->newEditEntityFactory(),
                        
$wikibaseRepo->getChangeOpFactoryProvider()->getFingerprintChangeOpFactory(),
-                       $wikibaseRepo->getTermsLanguages()
+                       $wikibaseRepo->getTermsLanguages(),
+                       $wikibaseRepo->getEntityPermissionChecker()
                );
        };
        $wgSpecialPages['SetSiteLink'] = function() {
diff --git a/repo/includes/Specials/SpecialModifyTerm.php 
b/repo/includes/Specials/SpecialModifyTerm.php
index 3c82bfa..124a3cf 100644
--- a/repo/includes/Specials/SpecialModifyTerm.php
+++ b/repo/includes/Specials/SpecialModifyTerm.php
@@ -14,6 +14,7 @@
 use Wikibase\Lib\ContentLanguages;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityTitleLookup;
+use Wikibase\Repo\Store\EntityPermissionChecker;
 use Wikibase\Repo\WikibaseRepo;
 use Wikibase\Summary;
 use Wikibase\SummaryFormatter;
@@ -52,12 +53,18 @@
        private $termsLanguages;
 
        /**
+        * @var EntityPermissionChecker
+        */
+       private $permissionChecker;
+
+       /**
         * @param string $title The title of the special page
         * @param SpecialPageCopyrightView $copyrightView
         * @param SummaryFormatter $summaryFormatter
         * @param EntityRevisionLookup $entityRevisionLookup
         * @param EntityTitleLookup $entityTitleLookup
         * @param EditEntityFactory $editEntityFactory
+        * @param EntityPermissionChecker $permissionChecker
         */
        public function __construct(
                $title,
@@ -65,7 +72,8 @@
                SummaryFormatter $summaryFormatter,
                EntityRevisionLookup $entityRevisionLookup,
                EntityTitleLookup $entityTitleLookup,
-               EditEntityFactory $editEntityFactory
+               EditEntityFactory $editEntityFactory,
+               EntityPermissionChecker $permissionChecker
        ) {
                parent::__construct(
                        $title,
@@ -80,6 +88,7 @@
                $changeOpFactoryProvider = 
$wikibaseRepo->getChangeOpFactoryProvider();
                $this->termChangeOpFactory = 
$changeOpFactoryProvider->getFingerprintChangeOpFactory();
                $this->termsLanguages = $wikibaseRepo->getTermsLanguages();
+               $this->permissionChecker = $permissionChecker;
        }
 
        public function doesWrites() {
@@ -142,7 +151,7 @@
                try {
                        $this->checkTermChangePermissions( 
$this->entityRevision->getEntity() );
                } catch ( PermissionsError $e ) {
-                       $this->showErrorHTML( $this->msg( 'permissionserrors' ) 
. ': ' . $e->permission );
+                       $this->showErrorHTML( $this->msg( 'permissionserrors' ) 
);
                        return false;
                }
 
@@ -179,13 +188,16 @@
         * @param EntityDocument $entity
         *
         * @throws PermissionsError
-        * @throws InvalidArgumentException
         */
        private function checkTermChangePermissions( EntityDocument $entity ) {
-               $restriction = $entity->getType() . '-term';
+               $status = 
$this->permissionChecker->getPermissionStatusForEntity(
+                       $this->getUser(),
+                       EntityPermissionChecker::PERMISSION_EDIT_TERMS,
+                       $entity
+               );
 
-               if ( !$this->getUser()->isAllowed( $restriction ) ) {
-                       throw new PermissionsError( $restriction );
+               if ( !$status->isOK() ) {
+                       throw new PermissionsError( null, $status->getErrors() 
);
                }
        }
 
diff --git a/repo/includes/Specials/SpecialSetAliases.php 
b/repo/includes/Specials/SpecialSetAliases.php
index cc5ccdc..66c3322 100644
--- a/repo/includes/Specials/SpecialSetAliases.php
+++ b/repo/includes/Specials/SpecialSetAliases.php
@@ -8,6 +8,7 @@
 use Wikibase\EditEntityFactory;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityTitleLookup;
+use Wikibase\Repo\Store\EntityPermissionChecker;
 use Wikibase\Summary;
 use Wikibase\SummaryFormatter;
 
@@ -24,7 +25,8 @@
                SummaryFormatter $summaryFormatter,
                EntityRevisionLookup $entityRevisionLookup,
                EntityTitleLookup $entityTitleLookup,
-               EditEntityFactory $editEntityFactory
+               EditEntityFactory $editEntityFactory,
+               EntityPermissionChecker $entityPermissionChecker
        ) {
                parent::__construct(
                        'SetAliases',
@@ -32,7 +34,8 @@
                        $summaryFormatter,
                        $entityRevisionLookup,
                        $entityTitleLookup,
-                       $editEntityFactory
+                       $editEntityFactory,
+                       $entityPermissionChecker
                );
        }
 
diff --git a/repo/includes/Specials/SpecialSetDescription.php 
b/repo/includes/Specials/SpecialSetDescription.php
index 41046ea..08103b9 100644
--- a/repo/includes/Specials/SpecialSetDescription.php
+++ b/repo/includes/Specials/SpecialSetDescription.php
@@ -8,6 +8,7 @@
 use Wikibase\EditEntityFactory;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityTitleLookup;
+use Wikibase\Repo\Store\EntityPermissionChecker;
 use Wikibase\Summary;
 use Wikibase\SummaryFormatter;
 
@@ -24,7 +25,8 @@
                SummaryFormatter $summaryFormatter,
                EntityRevisionLookup $entityRevisionLookup,
                EntityTitleLookup $entityTitleLookup,
-               EditEntityFactory $editEntityFactory
+               EditEntityFactory $editEntityFactory,
+               EntityPermissionChecker $entityPermissionChecker
        ) {
                parent::__construct(
                        'SetDescription',
@@ -32,7 +34,8 @@
                        $summaryFormatter,
                        $entityRevisionLookup,
                        $entityTitleLookup,
-                       $editEntityFactory
+                       $editEntityFactory,
+                       $entityPermissionChecker
                );
        }
 
diff --git a/repo/includes/Specials/SpecialSetLabel.php 
b/repo/includes/Specials/SpecialSetLabel.php
index f1b6f67..98929ee 100644
--- a/repo/includes/Specials/SpecialSetLabel.php
+++ b/repo/includes/Specials/SpecialSetLabel.php
@@ -8,6 +8,7 @@
 use Wikibase\EditEntityFactory;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityTitleLookup;
+use Wikibase\Repo\Store\EntityPermissionChecker;
 use Wikibase\Summary;
 use Wikibase\SummaryFormatter;
 
@@ -24,7 +25,8 @@
                SummaryFormatter $summaryFormatter,
                EntityRevisionLookup $entityRevisionLookup,
                EntityTitleLookup $entityTitleLookup,
-               EditEntityFactory $editEntityFactory
+               EditEntityFactory $editEntityFactory,
+               EntityPermissionChecker $entityPermissionChecker
        ) {
                parent::__construct(
                        'SetLabel',
@@ -32,7 +34,8 @@
                        $summaryFormatter,
                        $entityRevisionLookup,
                        $entityTitleLookup,
-                       $editEntityFactory
+                       $editEntityFactory,
+                       $entityPermissionChecker
                );
        }
 
diff --git a/repo/includes/Specials/SpecialSetLabelDescriptionAliases.php 
b/repo/includes/Specials/SpecialSetLabelDescriptionAliases.php
index 97a1624..2cfadd9 100644
--- a/repo/includes/Specials/SpecialSetLabelDescriptionAliases.php
+++ b/repo/includes/Specials/SpecialSetLabelDescriptionAliases.php
@@ -17,6 +17,7 @@
 use Wikibase\Lib\ContentLanguages;
 use Wikibase\Lib\Store\EntityRevisionLookup;
 use Wikibase\Lib\Store\EntityTitleLookup;
+use Wikibase\Repo\Store\EntityPermissionChecker;
 use Wikibase\Summary;
 use Wikibase\SummaryFormatter;
 
@@ -38,6 +39,11 @@
         * @var ContentLanguages
         */
        private $termsLanguages;
+
+       /**
+        * @var EntityPermissionChecker
+        */
+       private $permissionChecker;
 
        /**
         * @var string
@@ -66,7 +72,8 @@
                EntityTitleLookup $entityTitleLookup,
                EditEntityFactory $editEntityFactory,
                FingerprintChangeOpFactory $changeOpFactory,
-               ContentLanguages $termsLanguages
+               ContentLanguages $termsLanguages,
+               EntityPermissionChecker $permissionChecker
        ) {
                parent::__construct(
                        'SetLabelDescriptionAliases',
@@ -79,6 +86,7 @@
 
                $this->changeOpFactory = $changeOpFactory;
                $this->termsLanguages = $termsLanguages;
+               $this->permissionChecker = $permissionChecker;
        }
 
        public function doesWrites() {
@@ -117,10 +125,14 @@
         * @return bool
         */
        private function isAllowedToChangeTerms( EntityDocument $entity ) {
-               $action = $entity->getType() . '-term';
+               $status = 
$this->permissionChecker->getPermissionStatusForEntity(
+                       $this->getUser(),
+                       EntityPermissionChecker::PERMISSION_EDIT_TERMS,
+                       $entity
+               );
 
-               if ( !$this->getUser()->isAllowed( $action ) ) {
-                       $this->showErrorHTML( $this->msg( 'permissionserrors' ) 
. ': ' . $action );
+               if ( !$status->isOK() ) {
+                       $this->showErrorHTML( $this->msg( 'permissionserrors' ) 
);
                        return false;
                }
 
diff --git a/repo/tests/phpunit/includes/Specials/SpecialSetAliasesTest.php 
b/repo/tests/phpunit/includes/Specials/SpecialSetAliasesTest.php
index 667c80b..755e7b6 100644
--- a/repo/tests/phpunit/includes/Specials/SpecialSetAliasesTest.php
+++ b/repo/tests/phpunit/includes/Specials/SpecialSetAliasesTest.php
@@ -37,7 +37,8 @@
                        $wikibaseRepo->getSummaryFormatter(),
                        $wikibaseRepo->getEntityRevisionLookup( 'uncached' ),
                        $wikibaseRepo->getEntityTitleLookup(),
-                       $wikibaseRepo->newEditEntityFactory()
+                       $wikibaseRepo->newEditEntityFactory(),
+                       $wikibaseRepo->getEntityPermissionChecker()
                );
        }
 
diff --git a/repo/tests/phpunit/includes/Specials/SpecialSetDescriptionTest.php 
b/repo/tests/phpunit/includes/Specials/SpecialSetDescriptionTest.php
index 890ee74..2303585 100644
--- a/repo/tests/phpunit/includes/Specials/SpecialSetDescriptionTest.php
+++ b/repo/tests/phpunit/includes/Specials/SpecialSetDescriptionTest.php
@@ -37,7 +37,8 @@
                        $wikibaseRepo->getSummaryFormatter(),
                        $wikibaseRepo->getEntityRevisionLookup( 'uncached' ),
                        $wikibaseRepo->getEntityTitleLookup(),
-                       $wikibaseRepo->newEditEntityFactory()
+                       $wikibaseRepo->newEditEntityFactory(),
+                       $wikibaseRepo->getEntityPermissionChecker()
                );
        }
 
diff --git 
a/repo/tests/phpunit/includes/Specials/SpecialSetLabelDescriptionAliasesTest.php
 
b/repo/tests/phpunit/includes/Specials/SpecialSetLabelDescriptionAliasesTest.php
index f11e758..74825af 100644
--- 
a/repo/tests/phpunit/includes/Specials/SpecialSetLabelDescriptionAliasesTest.php
+++ 
b/repo/tests/phpunit/includes/Specials/SpecialSetLabelDescriptionAliasesTest.php
@@ -74,7 +74,8 @@
                                $this->getMockEditFitlerHookRunner()
                        ),
                        $this->getFingerprintChangeOpsFactory(),
-                       new StaticContentLanguages( self::$languageCodes )
+                       new StaticContentLanguages( self::$languageCodes ),
+                       $this->getEntityPermissionChecker()
                );
        }
 
diff --git a/repo/tests/phpunit/includes/Specials/SpecialSetLabelTest.php 
b/repo/tests/phpunit/includes/Specials/SpecialSetLabelTest.php
index 4473c22..6a3226a 100644
--- a/repo/tests/phpunit/includes/Specials/SpecialSetLabelTest.php
+++ b/repo/tests/phpunit/includes/Specials/SpecialSetLabelTest.php
@@ -37,7 +37,8 @@
                        $wikibaseRepo->getSummaryFormatter(),
                        $wikibaseRepo->getEntityRevisionLookup( 'uncached' ),
                        $wikibaseRepo->getEntityTitleLookup(),
-                       $wikibaseRepo->newEditEntityFactory()
+                       $wikibaseRepo->newEditEntityFactory(),
+                       $wikibaseRepo->getEntityPermissionChecker()
                );
        }
 

-- 
To view, visit https://gerrit.wikimedia.org/r/363305
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3da1c9dbf68948c119a01790784f38a48c66ff26
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: WMDE-leszek <leszek.mani...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to