Преглед изворни кода

Ticket #5252 - Context: Issue with roles permissions.

AntonLV пре 1 година
родитељ
комит
4177b785d3

+ 4 - 11
modules/base/groups/classes/BxBaseModGroupsModule.php

@@ -2106,21 +2106,14 @@ class BxBaseModGroupsModule extends BxBaseModProfileModule
 
     public function isAllowedModuleActionByRole($sModule, $sAction, $iProfileRole)
     {
-        static $aRoles;
-
-        if (!$aRoles && isset($this->_oConfig->CNF['OBJECT_PRE_LIST_ROLES']) && !empty($this->_oConfig->CNF['OBJECT_PRE_LIST_ROLES']))
-            $aRoles = BxBaseFormView::getDataItems($this->_oConfig->CNF['OBJECT_PRE_LIST_ROLES'], true, BX_DATA_VALUES_ALL);
-
-        if ($aRoles) {
+        if(($aRoles = $this->_oConfig->getRolesData()) && is_array($aRoles))
             foreach ($aRoles as $iRole => $aRoleData) {
-                if ($iRole == 0 && $iProfileRole == 0 || $iRole > 0 && $this->isRole($iProfileRole, $iRole)) {
-                    $mPermissions = isset($aRoles[$iRole]) && isset($aRoles[$iRole]['Data']) && !empty($aRoles[$iRole]['Data']) ? unserialize($aRoles[$iRole]['Data']) : false;
-                    if ($mPermissions && isset($mPermissions[$sModule])) {
+                if(($iRole == 0 && $iProfileRole == 0) || ($iRole > 0 && $this->isRole($iProfileRole, $iRole))) {
+                    $mPermissions = !empty($aRoleData['Data']) ? unserialize($aRoleData['Data']) : false;
+                    if($mPermissions && isset($mPermissions[$sModule]))
                         return isset($mPermissions[$sModule][$sAction]) && $mPermissions[$sModule][$sAction];
-                    }
                 }
             }
-        }
 
         return NULL;
     }

+ 16 - 2
modules/base/profile/classes/BxBaseModProfileConfig.php

@@ -18,6 +18,7 @@ class BxBaseModProfileConfig extends BxBaseModGeneralConfig
 
     protected $_bRoles;
     protected $_aRoles;
+    protected $_aRolesData;
 
     function __construct($aModule)
     {
@@ -58,6 +59,7 @@ class BxBaseModProfileConfig extends BxBaseModGeneralConfig
 
         $this->_bRoles = false;
         $this->_aRoles = false;
+        $this->_aRolesData = false;
     }
 
     public function isFriends()
@@ -85,6 +87,14 @@ class BxBaseModProfileConfig extends BxBaseModGeneralConfig
 
         return $this->_aRoles;
     }
+    
+    public function getRolesData()
+    {
+        if($this->_aRoles === false)
+            $this->_initRoles();
+
+        return $this->_aRolesData;
+    }
 
     public function roleIdI2S($iValue)
     {
@@ -98,11 +108,15 @@ class BxBaseModProfileConfig extends BxBaseModGeneralConfig
 
     protected function _initRoles()
     {
-        if(empty($this->CNF['OBJECT_PRE_LIST_ROLES'])) 
+        $sList = '';
+        if(!($sList = $this->CNF['OBJECT_PRE_LIST_ROLES'] ?? false)) 
             return;
 
-        $this->_aRoles = BxDolFormQuery::getDataItems($this->CNF['OBJECT_PRE_LIST_ROLES']);
+        $this->_aRoles = BxDolFormQuery::getDataItems($sList);
         $this->_bRoles = !empty($this->_aRoles) && is_array($this->_aRoles);
+
+        if($this->_bRoles)
+            $this->_aRolesData = BxDolFormQuery::getDataItems($sList, false, BX_DATA_VALUES_ALL);
     }
 
     public function getConnectionToFunctionCheck()