Skip to content

Commit a8c300b

Browse files
committed
ACP2E-277: treat missing rules from authorization_rule table as deny permission rules; fix static errors / warnings; fix failing mtft fails
1 parent a53e3be commit a8c300b

File tree

1 file changed

+19
-10
lines changed
  • app/code/Magento/Authorization/Model/Acl/Loader

1 file changed

+19
-10
lines changed

app/code/Magento/Authorization/Model/Acl/Loader/Rule.php

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ class Rule implements LoaderInterface
2323
*/
2424
public const ACL_RULE_CACHE_KEY = 'authorization_rule_cached_data';
2525

26+
/**
27+
* Allow everything resource id
28+
*/
29+
private const ALLOW_EVERYTHING = 'Magento_Backend::all';
30+
2631
/**
2732
* @var ResourceConnection
2833
*/
@@ -92,27 +97,26 @@ public function populateAcl(\Magento\Framework\Acl $acl)
9297
*/
9398
private function applyPermissionsAccordingToRules(\Magento\Framework\Acl $acl): array
9499
{
95-
$foundResources = [];
96-
$foundRoles = [];
100+
$foundResources = $foundDeniedRoles = [];
97101
foreach ($this->getRulesArray() as $rule) {
98102
$role = $rule['role_id'];
99103
$resource = $rule['resource_id'];
100104
$privileges = !empty($rule['privileges']) ? explode(',', $rule['privileges']) : null;
101105

102106
if ($acl->has($resource)) {
103107
$foundResources[$resource] = $resource;
104-
$foundRoles[$role] = $role;
105108
if ($rule['permission'] == 'allow') {
106109
if ($resource === $this->_rootResource->getId()) {
107110
$acl->allow($role, null, $privileges);
108111
}
109112
$acl->allow($role, $resource, $privileges);
110113
} elseif ($rule['permission'] == 'deny') {
114+
$foundDeniedRoles[$role] = $role;
111115
$acl->deny($role, $resource, $privileges);
112116
}
113117
}
114118
}
115-
return [$foundResources, $foundRoles];
119+
return [$foundResources, $foundDeniedRoles];
116120
}
117121

118122
/**
@@ -122,15 +126,20 @@ private function applyPermissionsAccordingToRules(\Magento\Framework\Acl $acl):
122126
*
123127
* @param \Magento\Framework\Acl $acl
124128
* @param array $resources
125-
* @param array $roles
129+
* @param array $deniedRoles
126130
* @return void
127131
*/
128-
private function applyDenyPermissionsForMissingRules(\Magento\Framework\Acl $acl, array $resources, array $roles)
132+
private function applyDenyPermissionsForMissingRules(\Magento\Framework\Acl $acl, array $resources, array $deniedRoles)
129133
{
130-
foreach ($acl->getResources() as $resource) {
131-
if (!isset($resources[$resource])) {
132-
foreach ($roles as $role) {
133-
$acl->deny($role, $resource, null);
134+
if (count($resources) && count($deniedRoles)
135+
//ignore denying missing permission if all are allowed
136+
&& !(count($resources) == 1 && isset($resources[static::ALLOW_EVERYTHING]))
137+
) {
138+
foreach ($acl->getResources() as $resource) {
139+
if (!isset($resources[$resource])) {
140+
foreach ($deniedRoles as $role) {
141+
$acl->deny($role, $resource, null);
142+
}
134143
}
135144
}
136145
}

0 commit comments

Comments
 (0)