diff --git a/composer.json b/composer.json index 7224681..e13fb71 100644 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "require": { "php": "~8.3.0 || ~8.4.0", "pimcore/pimcore": "^12.0", + "pimcore/generic-data-index-bundle": "^2.1", "symfony/event-dispatcher-contracts": "^3.0" }, "conflict": { diff --git a/src/DependencyInjection/FrontendPermissionToolkitExtension.php b/src/DependencyInjection/FrontendPermissionToolkitExtension.php index 4789eed..e4508d0 100644 --- a/src/DependencyInjection/FrontendPermissionToolkitExtension.php +++ b/src/DependencyInjection/FrontendPermissionToolkitExtension.php @@ -30,5 +30,6 @@ public function load(array $configs, ContainerBuilder $container): void ); $loader->load('services.yml'); + $loader->load('generic-data-index.yaml'); } } diff --git a/src/GenericDataIndex/FieldDefinitionAdapter/DynamicPermissionResourceAdapter.php b/src/GenericDataIndex/FieldDefinitionAdapter/DynamicPermissionResourceAdapter.php new file mode 100644 index 0000000..83e8032 --- /dev/null +++ b/src/GenericDataIndex/FieldDefinitionAdapter/DynamicPermissionResourceAdapter.php @@ -0,0 +1,54 @@ +indexMappingService->getMappingForTextKeyword( + $this->searchIndexConfigService->getSearchAnalyzerAttributes() + ); + } + + public function normalize(mixed $value): ?array + { + $fieldDefinition = $this->getFieldDefinition(); + if (!$fieldDefinition instanceof DynamicPermissionResource) { + return null; + } + + return array_values($value); + } +} diff --git a/src/Resources/config/generic-data-index.yaml b/src/Resources/config/generic-data-index.yaml new file mode 100644 index 0000000..0137295 --- /dev/null +++ b/src/Resources/config/generic-data-index.yaml @@ -0,0 +1,23 @@ +services: + _defaults: + autowire: true + autoconfigure: true + public: false + + pimcore.front_permission_toolkit.generic_data_index.data_object.relation-adapter: + class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\DataObject\FieldDefinitionAdapter\RelationAdapter + shared: false + tags: + - { name: "pimcore.generic_data_index.data-object.search_index_field_definition", type: "permissionManyToManyRelation" } + - { name: "pimcore.generic_data_index.data-object.search_index_field_definition", type: "permissionManyToOneRelation" } + + pimcore.front_permission_toolkit.generic_data_index.data_object.dynamic-permission-resource-adapter: + class: Pimcore\Bundle\GenericDataIndexBundle\SearchIndexAdapter\DefaultSearch\DataObject\FieldDefinitionAdapter\TextKeywordAdapter + shared: false + tags: + - { name: "pimcore.generic_data_index.data-object.search_index_field_definition", type: "permissionResource" } + + FrontendPermissionToolkitBundle\GenericDataIndex\FieldDefinitionAdapter\DynamicPermissionResourceAdapter: + shared: false + tags: + - { name: "pimcore.generic_data_index.data-object.search_index_field_definition", type: "dynamicPermissionResource" }