Pwirth has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/377786 )
Change subject: BSWikiAdmin: Admin menu - individual module permission check ...................................................................... BSWikiAdmin: Admin menu - individual module permission check * Admin menu for left sidebar now checks individual admin module permissions instead of only showing when user has 'wikiadmin' permission * Added individual permissions for admin modules to the extensions providing these * Added individual permission checks to the extensions that make use of the hook BSWikiAdminMenuItems to register non WikiAdminModule links to the menu => part of #7401 => needs cherry-pick to REL1_27 Change-Id: I33a14d6a429d474d3a900e8e23d40b061fc965b3 --- M AboutBlueSpice/AboutBlueSpice.class.php M ExtensionInfo/ExtensionInfo.class.php M Flexiskin/Flexiskin.class.php M GroupManager/GroupManager.class.php M InterWikiLinks/InterWikiLinks.class.php M NamespaceManager/NamespaceManager.class.php M PageAssignments/includes/PageAssignmentsHooks.php M PageTemplates/PageTemplates.class.php M PermissionManager/PermissionManager.class.php M Preferences/Preferences.class.php M UserManager/UserManager.class.php M WikiAdmin/WikiAdmin.class.php 12 files changed, 66 insertions(+), 41 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceExtensions refs/changes/86/377786/1 diff --git a/AboutBlueSpice/AboutBlueSpice.class.php b/AboutBlueSpice/AboutBlueSpice.class.php index efa6a08..9bea414 100644 --- a/AboutBlueSpice/AboutBlueSpice.class.php +++ b/AboutBlueSpice/AboutBlueSpice.class.php @@ -65,12 +65,16 @@ /** * Returns a list item with a link to the "About BlueSpice" special page * @param array $aOutSortable Indexed list of menu items. Add item in HTML form. + * @param \User The user in which context the menu is rendered * @return string Link to the "About BlueSpice" special page */ - public static function onBSWikiAdminMenuItems( &$aOutSortable ) { + public static function onBSWikiAdminMenuItems( &$aOutSortable, $oUser ) { if ( !BsConfig::get( 'MW::AboutBlueSpice::ShowMenuLinks' )) { return true; } + if( !$oUser->isAllowed( 'aboutbluespice-viewspecialpage' ) ) { + return true; + } $oSpecialPage = SpecialPage::getTitleFor( 'AboutBlueSpice' ); $sLink = Html::element( 'a', diff --git a/ExtensionInfo/ExtensionInfo.class.php b/ExtensionInfo/ExtensionInfo.class.php index 3368573..8bf1b63 100644 --- a/ExtensionInfo/ExtensionInfo.class.php +++ b/ExtensionInfo/ExtensionInfo.class.php @@ -41,9 +41,13 @@ /** * Adds a link to WikiAdmin menu * @param array $aOutSortable + * @param \User The user in which context the menu is rendered * @return boolean Alway true to keep hook running */ - public static function onBSWikiAdminMenuItems( &$aOutSortable ) { + public static function onBSWikiAdminMenuItems( &$aOutSortable, $oUser ) { + if( !$oUser->isAllowed( 'wikiadmin' ) ) { + return true; + } $sLabel = wfMessage( 'bs-extensioninfo-label' )->plain(); $aOutSortable[$sLabel] = Html::rawElement( 'li', array(), Linker::link( SpecialPage::getTitleFor( 'ExtensionInfo' ), $sLabel, array( 'class' => 'bs-admin-link bs-icon-puzzle' ) ) diff --git a/Flexiskin/Flexiskin.class.php b/Flexiskin/Flexiskin.class.php index 8158787..fa494fd 100755 --- a/Flexiskin/Flexiskin.class.php +++ b/Flexiskin/Flexiskin.class.php @@ -50,7 +50,8 @@ 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_flexiskin_v1.png', 'level' => 'wikiadmin', 'message' => 'bs-flexiskin-label', - 'iconCls' => 'bs-icon-painting-roll' + 'iconCls' => 'bs-icon-painting-roll', + 'permissions' => [ 'flexiskin-viewspecialpage' ], ) ); wfProfileOut( 'BS::' . __METHOD__ ); } diff --git a/GroupManager/GroupManager.class.php b/GroupManager/GroupManager.class.php index 75e218c..d5fc90b 100644 --- a/GroupManager/GroupManager.class.php +++ b/GroupManager/GroupManager.class.php @@ -43,13 +43,13 @@ */ public function __construct() { wfProfileIn( 'BS::'.__METHOD__ ); - WikiAdmin::registerModule('GroupManager', array( + WikiAdmin::registerModule( 'GroupManager', [ 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_gruppe_v1.png', 'level' => 'wikiadmin', 'message' => 'bs-groupmanager-label', - 'iconCls' => 'bs-icon-group' - ) - ); + 'iconCls' => 'bs-icon-group', + 'permissions' => [ 'groupmanager-viewspecialpage' ], + ]); wfProfileOut( 'BS::'.__METHOD__ ); } diff --git a/InterWikiLinks/InterWikiLinks.class.php b/InterWikiLinks/InterWikiLinks.class.php index d43b2d2..37bc788 100644 --- a/InterWikiLinks/InterWikiLinks.class.php +++ b/InterWikiLinks/InterWikiLinks.class.php @@ -44,13 +44,13 @@ */ public function __construct() { wfProfileIn( 'BS::'.__METHOD__ ); - WikiAdmin::registerModule('InterWikiLinks', array( + WikiAdmin::registerModule( 'InterWikiLinks', [ 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_interwikilinks_v1.png', 'level' => 'wikiadmin', 'message' => 'bs-interwikilinks-label', - 'iconCls' => 'bs-icon-chain' - ) - ); + 'iconCls' => 'bs-icon-chain', + 'permissions' => [ 'interwikilinks-viewspecialpage' ], + ]); wfProfileOut( 'BS::'.__METHOD__ ); } diff --git a/NamespaceManager/NamespaceManager.class.php b/NamespaceManager/NamespaceManager.class.php index beb9c4d..15dfcfa 100644 --- a/NamespaceManager/NamespaceManager.class.php +++ b/NamespaceManager/NamespaceManager.class.php @@ -53,13 +53,13 @@ public function __construct() { wfProfileIn( 'BS::NamespaceManager::__construct' ); - WikiAdmin::registerModule( 'NamespaceManager', array( + WikiAdmin::registerModule( 'NamespaceManager', [ 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_namespaces_v1.png', 'level' => 'wikiadmin', 'message' => 'bs-namespacemanager-label', - 'iconCls' => 'bs-icon-register-box' - ) - ); + 'iconCls' => 'bs-icon-register-box', + 'permissions' => [ 'namespacemanager-viewspecialpage' ], + ]); wfProfileOut( 'BS::NamespaceManager::__construct' ); } diff --git a/PageAssignments/includes/PageAssignmentsHooks.php b/PageAssignments/includes/PageAssignmentsHooks.php index 9872065..6cacf87 100644 --- a/PageAssignments/includes/PageAssignmentsHooks.php +++ b/PageAssignments/includes/PageAssignmentsHooks.php @@ -40,9 +40,13 @@ /** * * @param array $aOut + * @param \User The user in which context the menu is rendered * @return boolean */ - public static function onBSWikiAdminMenuItems( &$aOut ){ + public static function onBSWikiAdminMenuItems( &$aOut, $oUser ){ + if( !$oUser->isAllowed( 'pageassignments' ) ) { + return true; + } $sLabel = wfMessage( 'managepageassignments' )->plain(); $aOut[$sLabel] = Html::rawElement( 'li', array(), Linker::link( SpecialPage::getTitleFor( 'ManagePageAssignments' ), $sLabel, array( 'class' => 'bs-admin-link bs-icon-profile' ) ) diff --git a/PageTemplates/PageTemplates.class.php b/PageTemplates/PageTemplates.class.php index 78228c8..a772897 100644 --- a/PageTemplates/PageTemplates.class.php +++ b/PageTemplates/PageTemplates.class.php @@ -44,7 +44,8 @@ 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_templates_v1.png', 'level' => 'wikiadmin', 'message' => 'bs-pagetemplatesadmin-label', - 'iconCls' => 'bs-icon-clipboard-checked' + 'iconCls' => 'bs-icon-clipboard-checked', + 'permissions' => [ 'pagetemplatesadmin-viewspecialpage' ], ) ); wfProfileOut( 'BS::'.__METHOD__ ); } diff --git a/PermissionManager/PermissionManager.class.php b/PermissionManager/PermissionManager.class.php index 4f3bbc7..6a63634 100644 --- a/PermissionManager/PermissionManager.class.php +++ b/PermissionManager/PermissionManager.class.php @@ -97,13 +97,13 @@ */ public function __construct() { wfProfileIn( 'BS::' . __METHOD__); - WikiAdmin::registerModule( 'PermissionManager', array( - 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_rechteverwaltung_v1.png', - 'level' => 'wikiadmin', - 'message' => 'bs-permissionmanager-label', - 'iconCls' => 'bs-icon-key' - ) - ); + WikiAdmin::registerModule( 'PermissionManager', [ + 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_rechteverwaltung_v1.png', + 'level' => 'wikiadmin', + 'message' => 'bs-permissionmanager-label', + 'iconCls' => 'bs-icon-key', + 'permissions' => [ 'permissionmanager-viewspecialpage' ], + ]); wfProfileOut( 'BS::' . __METHOD__ ); } diff --git a/Preferences/Preferences.class.php b/Preferences/Preferences.class.php index 2796423..87bce6b 100644 --- a/Preferences/Preferences.class.php +++ b/Preferences/Preferences.class.php @@ -40,19 +40,20 @@ class BsPreferences extends BsExtensionMW { public function __construct() { - wfProfileIn( 'BS::' . __METHOD__ ); - // Base settings - $this->mExtensionFile = __FILE__; - $this->mExtensionType = EXTTYPE::SPECIALPAGE; + wfProfileIn( 'BS::' . __METHOD__ ); + // Base settings + $this->mExtensionFile = __FILE__; + $this->mExtensionType = EXTTYPE::SPECIALPAGE; - WikiAdmin::registerModule( 'BlueSpicePreferences', array( - 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_einstellungen_v1.png', - 'level' => 'wikiadmin', - 'message' => 'bs-bluespicepreferences-label', - 'iconCls' => 'bs-icon-wrench' - ) ); + WikiAdmin::registerModule( 'BlueSpicePreferences', [ + 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_einstellungen_v1.png', + 'level' => 'wikiadmin', + 'message' => 'bs-bluespicepreferences-label', + 'iconCls' => 'bs-icon-wrench', + 'permissions' => [ 'bluespicepreferences-viewspecialpage' ], + ]); - wfProfileOut( 'BS::' . __METHOD__ ); + wfProfileOut( 'BS::' . __METHOD__ ); } protected function initExt() { diff --git a/UserManager/UserManager.class.php b/UserManager/UserManager.class.php index 3e9b434..9b10aed 100644 --- a/UserManager/UserManager.class.php +++ b/UserManager/UserManager.class.php @@ -50,7 +50,8 @@ 'image' => '/extensions/BlueSpiceExtensions/WikiAdmin/resources/images/bs-btn_usermanagement_v1.png', 'level' => 'wikiadmin', 'message' => 'bs-usermanager-label', - 'iconCls' => 'bs-icon-user-add' + 'iconCls' => 'bs-icon-user-add', + 'permissions' => [ 'usermanager-viewspecialpage' ], ) ); wfProfileOut( 'BS::'.__METHOD__ ); diff --git a/WikiAdmin/WikiAdmin.class.php b/WikiAdmin/WikiAdmin.class.php index 1dd5596..b4b2576 100644 --- a/WikiAdmin/WikiAdmin.class.php +++ b/WikiAdmin/WikiAdmin.class.php @@ -179,15 +179,22 @@ * @return boolean */ public function onBSUserSidebarGlobalActionsWidgets( &$aViews, User $oUser ) { - if( !$oUser->isAllowed('wikiadmin') ) { + if( $oUser->isAnon() ) { return true; } - - $aRegisteredModules = WikiAdmin::getRegisteredModules(); $aOutSortable = array(); foreach ( $aRegisteredModules as $sModuleKey => $aModulParams ) { + if( empty( $aModulParams['permissions'] ) ) { + $aModulParams['permissions'] = [ 'wikiadmin' ]; + } + foreach( $aModulParams['permissions'] as $sPermission ) { + if( $oUser->isAllowed( $sPermission ) ) { + continue; + } + continue 2; + } $oSpecialPage = SpecialPage::getTitleFor( $sModuleKey ); $skeyLower = mb_strtolower( $sModuleKey ); $sMessageKey = 'bs-' . $skeyLower . '-label'; @@ -216,8 +223,10 @@ } // Allow other extensions to add to the admin menu - Hooks::run( 'BSWikiAdminMenuItems', array ( &$aOutSortable ) ); - + Hooks::run( 'BSWikiAdminMenuItems', [ &$aOutSortable, $oUser ] ); + if( empty( $aOutSortable ) ) { + return true; + } ksort( $aOutSortable ); $sBody = implode( "\n", $aOutSortable ); -- To view, visit https://gerrit.wikimedia.org/r/377786 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I33a14d6a429d474d3a900e8e23d40b061fc965b3 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/BlueSpiceExtensions Gerrit-Branch: master Gerrit-Owner: Pwirth <wi...@hallowelt.biz> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits