diff --git a/vendor/magento/module-elasticsearch-catalog-permissions/Model/ResourceModel/Index.php b/vendor/magento/module-elasticsearch-catalog-permissions/Model/ResourceModel/Index.php index 6e22f93261b1..7375da27443f 100644 --- a/vendor/magento/module-elasticsearch-catalog-permissions/Model/ResourceModel/Index.php +++ b/vendor/magento/module-elasticsearch-catalog-permissions/Model/ResourceModel/Index.php @@ -5,8 +5,12 @@ */ namespace Magento\ElasticsearchCatalogPermissions\Model\ResourceModel; +use Magento\CatalogPermissions\App\ConfigInterface as PermissionsConfig; +use Magento\CatalogPermissions\Model\Permission as PermissionModel; +use Magento\Customer\Model\ResourceModel\Group\CollectionFactory as CustomerGroupCollectionFactory; + /** - * Class Index + * Permissions index data provider. */ class Index { @@ -15,13 +19,29 @@ class Index */ private $categoryPermissionsIndex; + /** + * @var PermissionsConfig + */ + private $permissionsConfig; + + /** + * @var CustomerGroupCollectionFactory + */ + private $customerGroupCollectionFactory; + /** * @param \Magento\CatalogPermissions\Model\ResourceModel\Permission\Index $categoryPermissionsIndex + * @param PermissionsConfig $permissionsConfig + * @param CustomerGroupCollectionFactory $customerGroupCollectionFactory */ public function __construct( - \Magento\CatalogPermissions\Model\ResourceModel\Permission\Index $categoryPermissionsIndex + \Magento\CatalogPermissions\Model\ResourceModel\Permission\Index $categoryPermissionsIndex, + PermissionsConfig $permissionsConfig, + CustomerGroupCollectionFactory $customerGroupCollectionFactory ) { $this->categoryPermissionsIndex = $categoryPermissionsIndex; + $this->permissionsConfig = $permissionsConfig; + $this->customerGroupCollectionFactory = $customerGroupCollectionFactory; } /** @@ -33,11 +53,30 @@ public function __construct( */ public function getProductPermissionsIndexData(array $productIds, int $storeId) { - $data = $this->categoryPermissionsIndex->getIndexForProduct($productIds, null, $storeId); - $result = []; + if (!$this->permissionsConfig->isEnabled($storeId)) { + return $result; + } + + $data = $this->categoryPermissionsIndex->getIndexForProduct($productIds, null, $storeId); foreach ($data as $row) { - $result[$row['product_id']][$row['customer_group_id']] = $row['grant_catalog_category_view']; + $result[$row['product_id']][$row['customer_group_id']] = (int) $row['grant_catalog_category_view']; + } + + $categoryViewMode = (int) $this->permissionsConfig->getCatalogCategoryViewMode($storeId); + if (PermissionsConfig::GRANT_ALL === $categoryViewMode) { + return $result; + } + + $customerGroupCollection = $this->customerGroupCollectionFactory->create(); + $customerGroupIds = $customerGroupCollection->getAllIds(); + if (PermissionsConfig::GRANT_CUSTOMER_GROUP === $categoryViewMode) { + $allowViewGroups = $this->permissionsConfig->getCatalogCategoryViewGroups($storeId); + $customerGroupIds = array_diff($customerGroupIds, $allowViewGroups); + } + $permissions = array_fill_keys($customerGroupIds, PermissionModel::PERMISSION_DENY); + foreach ($productIds as $productId) { + $result[$productId] = ($result[$productId] ?? []) + $permissions; } return $result; diff --git a/vendor/magento/module-elasticsearch-catalog-permissions/etc/di.xml b/vendor/magento/module-elasticsearch-catalog-permissions/etc/di.xml index f3218567bad9..e616ceb406fb 100644 --- a/vendor/magento/module-elasticsearch-catalog-permissions/etc/di.xml +++ b/vendor/magento/module-elasticsearch-catalog-permissions/etc/di.xml @@ -75,4 +75,9 @@ + + + Magento\CatalogPermissions\App\Config + + >