Skip to content

Commit 71d9072

Browse files
authored
Improved orphaned resources detection in backend, fixed #4007 (#4022)
1 parent 6147a15 commit 71d9072

File tree

3 files changed

+7
-9
lines changed

3 files changed

+7
-9
lines changed

app/code/core/Mage/Admin/Model/Resource/Acl.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ class Mage_Admin_Model_Resource_Acl extends Mage_Core_Model_Resource_Db_Abstract
2323
{
2424
public const ACL_ALL_RULES = 'all';
2525

26-
protected $_orphanedResources = [];
27-
2826
/**
2927
* Initialize resource
3028
*
@@ -114,6 +112,7 @@ public function loadRoles(Mage_Admin_Model_Acl $acl, array $rolesArr)
114112
*/
115113
public function loadRules(Mage_Admin_Model_Acl $acl, array $rulesArr)
116114
{
115+
$orphanedResources = [];
117116
foreach ($rulesArr as $rule) {
118117
$role = $rule['role_type'] . $rule['role_id'];
119118
$resource = $rule['resource_id'];
@@ -134,8 +133,8 @@ public function loadRules(Mage_Admin_Model_Acl $acl, array $rulesArr)
134133
$acl->deny($role, $resource, $privileges, $assert);
135134
}
136135
} catch (Zend_Acl_Exception $e) {
137-
if (!in_array($resource, $this->_orphanedResources) && strpos($e->getMessage(), "Resource '$resource' not found") !== false) {
138-
$this->_orphanedResources[] = $resource;
136+
if (!in_array($resource, $orphanedResources) && strpos($e->getMessage(), "Resource '$resource' not found") !== false) {
137+
$orphanedResources[] = $resource;
139138
}
140139
} catch (Exception $e) {
141140
if (Mage::getIsDeveloperMode()) {
@@ -144,11 +143,11 @@ public function loadRules(Mage_Admin_Model_Acl $acl, array $rulesArr)
144143
}
145144
}
146145

147-
if ($this->_orphanedResources !== []) {
146+
if ($orphanedResources !== [] && $acl->isAllowed(Mage::getSingleton('admin/session')->getUser()->getAclRole(), 'admin/system/acl/orphaned_resources')) {
148147
Mage::getSingleton('adminhtml/session')->addNotice(
149148
Mage::helper('adminhtml')->__(
150149
'The following role resources are no longer available in the system: %s. You can delete them by <a href="%s">clicking here</a>.',
151-
implode(', ', $this->_orphanedResources),
150+
implode(', ', $orphanedResources),
152151
Mage::helper("adminhtml")->getUrl('adminhtml/permissions_orphanedResource')
153152
)
154153
);

app/code/core/Mage/Admin/Model/Roles.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ protected function _buildResourcesArray(
137137
$level = -1;
138138
} else {
139139
$resourceName = $parentName;
140-
if (!in_array($resource->getName(), ['title', 'sort_order', 'children', 'disabled'])) {
140+
if (!empty($resource->children()) && $resource->getName() !== 'children') {
141141
$resourceName = (is_null($parentName) ? '' : $parentName . '/') . $resource->getName();
142142

143143
//assigning module for its' children nodes

app/code/core/Mage/Adminhtml/Block/Permissions/OrphanedResource/Grid.php

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ public function __construct()
3636
*/
3737
protected function _prepareCollection()
3838
{
39-
/** @var Mage_Admin_Model_Resource_Rules_Collection */
4039
$collection = Mage::getResourceModel('admin/rules_collection')
41-
->addFieldToFilter('resource_id', ['nin' => Mage::getModel('admin/roles')->getResourcesList2D()])
40+
->addFieldToFilter('resource_id', ['nin' => Mage::getSingleton('admin/session')->getAcl()->getResources()])
4241
->addFieldToSelect('resource_id');
4342
$collection->getSelect()->group('resource_id');
4443

0 commit comments

Comments
 (0)