Przeglądaj źródła

Ticket #3282 - Approve action should be checked with it's own check function.

AntonLV 5 lat temu
rodzic
commit
57b8af2262

+ 34 - 0
modules/base/general/classes/BxBaseModGeneralModule.php

@@ -2208,6 +2208,40 @@ class BxBaseModGeneralModule extends BxDolModule
         return CHECK_ACTION_RESULT_ALLOWED;
     }
 
+    /**
+     * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden. So make sure to make strict(===) checking.
+     */
+    public function checkAllowedApprove ($aDataEntry, $isPerformAction = false)
+    {
+        // moderator always have access
+        if ($this->_isModerator($isPerformAction))
+            return CHECK_ACTION_RESULT_ALLOWED;
+
+        // check for context's admins 
+        if (!empty($this->_oConfig->CNF['FIELD_ALLOW_VIEW_TO']) && (int)$aDataEntry[$this->_oConfig->CNF['FIELD_ALLOW_VIEW_TO']] < 0) {
+            $oProfile = BxDolProfile::getInstance(-(int)$aDataEntry[$this->_oConfig->CNF['FIELD_ALLOW_VIEW_TO']]);
+            if ($oProfile){
+                $sModule = $oProfile->getModule();
+                $aEntity = BxDolRequest::serviceExists($sModule, 'get_all') ? BxDolService::call($sModule, 'get_all', array(array('type' => 'id', 'id' => $oProfile->getContentId()))) : array();
+
+                $oModule = BxDolModule::getInstance($sModule);
+
+                // check for context's extra roles with rights
+                if (method_exists($oModule, 'isAllowedModuleActionByProfile')) {
+                    $bResult = $oModule->isAllowedModuleActionByProfile($oProfile->getContentId(), $this->getName(), 'edit_any');
+                    if ($bResult !== NULL) return $bResult;
+                }
+
+                // if allowed edit a group then allowed to edit anything inside its context
+                if(isset($aEntity) && $oModule->checkAllowedEdit($aEntity) === CHECK_ACTION_RESULT_ALLOWED){
+                    return CHECK_ACTION_RESULT_ALLOWED;
+                }
+            }
+        }
+
+        return _t('_sys_txt_access_denied');
+    }
+
     /**
      * @return CHECK_ACTION_RESULT_ALLOWED if access is granted or error message if access is forbidden. So make sure to make strict(===) checking.
      */

+ 1 - 0
modules/boonex/ads/classes/BxAdsConfig.php

@@ -24,6 +24,7 @@ class BxAdsConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-ad' => 'checkAllowedEdit',
             'delete-ad' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/albums/classes/BxAlbumsConfig.php

@@ -16,6 +16,7 @@ class BxAlbumsConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'add-images-to-album' => 'checkAllowedEdit',
             'edit-album' => 'checkAllowedEdit',
             'edit-image' => 'checkAllowedEdit',

+ 1 - 0
modules/boonex/classes/classes/BxClssConfig.php

@@ -16,6 +16,7 @@ class BxClssConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'complete-class' => 'checkAllowedViewMarkAsCompletedButton',
             'edit-class' => 'checkAllowedEdit',
             'delete-class' => 'checkAllowedDelete',

+ 1 - 0
modules/boonex/files/classes/BxFilesConfig.php

@@ -16,6 +16,7 @@ class BxFilesConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'download-file' => 'checkAllowedView',
             'edit-file' => 'checkAllowedEdit',
             'delete-file' => 'checkAllowedDelete',

+ 1 - 0
modules/boonex/forum/classes/BxForumConfig.php

@@ -24,6 +24,7 @@ class BxForumConfig extends BxBaseModTextConfig
             'unlock-discussion' => 'checkAllowedUnlockAnyEntry',
             'hide-discussion' => 'checkAllowedHideAnyEntry',
             'unhide-discussion' => 'checkAllowedUnhideAnyEntry',
+            'approve' => 'checkAllowedApprove',
             'edit-discussion' => 'checkAllowedEdit',
             'delete-discussion' => 'checkAllowedDelete'
         );

+ 1 - 0
modules/boonex/glossary/classes/BxGlsrConfig.php

@@ -16,6 +16,7 @@ class BxGlsrConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-glossary' => 'checkAllowedEdit',
             'delete-glossary' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/market/classes/BxMarketConfig.php

@@ -20,6 +20,7 @@ class BxMarketConfig extends BxBaseModTextConfig
         $aMenuItems2Methods = array (
             'hide-product' => 'checkAllowedHide',
             'unhide-product' => 'checkAllowedUnhide',
+            'approve' => 'checkAllowedApprove',
             'edit-product' => 'checkAllowedEdit',
             'delete-product' => 'checkAllowedDelete',
             'product-more' => 'checkAllowedViewMoreMenu'

+ 1 - 0
modules/boonex/photos/classes/BxPhotosConfig.php

@@ -18,6 +18,7 @@ class BxPhotosConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-photo' => 'checkAllowedEdit',
             'delete-photo' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/polls/classes/BxPollsConfig.php

@@ -16,6 +16,7 @@ class BxPollsConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-poll' => 'checkAllowedEdit',
             'delete-poll' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/posts/classes/BxPostsConfig.php

@@ -16,6 +16,7 @@ class BxPostsConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-post' => 'checkAllowedEdit',
             'delete-post' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/reviews/classes/BxReviewsConfig.php

@@ -16,6 +16,7 @@ class BxReviewsConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-review' => 'checkAllowedEdit',
             'delete-review' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/shopify/classes/BxShopifyConfig.php

@@ -18,6 +18,7 @@ class BxShopifyConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-shopify-entry' => 'checkAllowedEdit',
             'delete-shopify-entry' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/snipcart/classes/BxSnipcartConfig.php

@@ -16,6 +16,7 @@ class BxSnipcartConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-snipcart-entry' => 'checkAllowedEdit',
             'delete-snipcart-entry' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/tasks/classes/BxTasksConfig.php

@@ -17,6 +17,7 @@ class BxTasksConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-task' => 'checkAllowedEdit',
             'delete-task' => 'checkAllowedDelete',
         );

+ 1 - 0
modules/boonex/videos/classes/BxVideosConfig.php

@@ -19,6 +19,7 @@ class BxVideosConfig extends BxBaseModTextConfig
         parent::__construct($aModule);
 
         $aMenuItems2Methods = array (
+            'approve' => 'checkAllowedApprove',
             'edit-video' => 'checkAllowedEdit',
             'delete-video' => 'checkAllowedDelete',
         );