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