|
| 1 | +diff --git a/vendor/magento/module-company-graph-ql/Model/Company/Role/ValidateRole.php b/vendor/magento/module-company-graph-ql/Model/Company/Role/ValidateRole.php |
| 2 | +index d457bc30f3..2c7f0bd673 100644 |
| 3 | +--- a/vendor/magento/module-company-graph-ql/Model/Company/Role/ValidateRole.php |
| 4 | ++++ b/vendor/magento/module-company-graph-ql/Model/Company/Role/ValidateRole.php |
| 5 | +@@ -8,7 +8,7 @@ declare(strict_types=1); |
| 6 | + |
| 7 | + namespace Magento\CompanyGraphQl\Model\Company\Role; |
| 8 | + |
| 9 | +-use Magento\Company\Model\ResourceModel\Permission\Collection as PermissionCollection; |
| 10 | ++use Magento\Framework\Acl\AclResource\ProviderInterface; |
| 11 | + use Magento\Framework\GraphQl\Exception\GraphQlInputException; |
| 12 | + |
| 13 | + /** |
| 14 | +@@ -24,16 +24,16 @@ class ValidateRole |
| 15 | + private $requiredFields = []; |
| 16 | + |
| 17 | + /** |
| 18 | +- * @var PermissionCollection |
| 19 | ++ * @var ProviderInterface |
| 20 | + */ |
| 21 | +- private $permissionCollection; |
| 22 | ++ private $resourceProvider; |
| 23 | + |
| 24 | + /** |
| 25 | +- * @param PermissionCollection $permissionCollection |
| 26 | ++ * @param ProviderInterface $resourceProvider |
| 27 | + */ |
| 28 | +- public function __construct(PermissionCollection $permissionCollection) |
| 29 | ++ public function __construct(ProviderInterface $resourceProvider) |
| 30 | + { |
| 31 | +- $this->permissionCollection = $permissionCollection; |
| 32 | ++ $this->resourceProvider = $resourceProvider; |
| 33 | + } |
| 34 | + |
| 35 | + /** |
| 36 | +@@ -97,17 +97,31 @@ class ValidateRole |
| 37 | + */ |
| 38 | + private function validateResources(array $resourcesList) |
| 39 | + { |
| 40 | +- $errorInput = []; |
| 41 | +- $resources = $this->permissionCollection->getColumnValues('resource_id'); |
| 42 | +- foreach ($resourcesList as $resource) { |
| 43 | +- if (!in_array($resource, $resources, true)) { |
| 44 | +- $errorInput[] = $resource; |
| 45 | +- } |
| 46 | +- } |
| 47 | ++ $resources = array_values($this->toFlatArray($this->resourceProvider->getAclResources())); |
| 48 | ++ $errorInput = array_diff($resourcesList, $resources); |
| 49 | + if ($errorInput) { |
| 50 | + throw new GraphQlInputException( |
| 51 | + __('Invalid role permission resources: %1.', [implode(', ', $errorInput)]) |
| 52 | + ); |
| 53 | + } |
| 54 | + } |
| 55 | ++ |
| 56 | ++ /** |
| 57 | ++ * Convert resources tree to flat array |
| 58 | ++ * |
| 59 | ++ * @param array $resources |
| 60 | ++ * @return array |
| 61 | ++ */ |
| 62 | ++ private function toFlatArray(array $resources): array |
| 63 | ++ { |
| 64 | ++ $result = []; |
| 65 | ++ foreach ($resources as $resource) { |
| 66 | ++ $result[$resource['id']] = $resource['id']; |
| 67 | ++ if (!empty($resource['children'])) { |
| 68 | ++ $result += $this->toFlatArray($resource['children']); |
| 69 | ++ } |
| 70 | ++ } |
| 71 | ++ |
| 72 | ++ return $result; |
| 73 | ++ } |
| 74 | + } |
| 75 | +diff --git a/vendor/magento/module-company-graph-ql/etc/graphql/di.xml b/vendor/magento/module-company-graph-ql/etc/graphql/di.xml |
| 76 | +index d7d2599e17..4dbea8cc89 100644 |
| 77 | +--- a/vendor/magento/module-company-graph-ql/etc/graphql/di.xml |
| 78 | ++++ b/vendor/magento/module-company-graph-ql/etc/graphql/di.xml |
| 79 | +@@ -102,4 +102,9 @@ |
| 80 | + </argument> |
| 81 | + </arguments> |
| 82 | + </type> |
| 83 | ++ <type name="Magento\CompanyGraphQl\Model\Company\Role\ValidateRole"> |
| 84 | ++ <arguments> |
| 85 | ++ <argument name="resourceProvider" xsi:type="object">Magento\Company\Acl\AclResource\Provider</argument> |
| 86 | ++ </arguments> |
| 87 | ++ </type> |
| 88 | + </config> |
0 commit comments