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

Reply via email to