diff --git a/composer.json b/composer.json index 67aa8481530ba4f4158cdb01ff9156b0884246b9..b971c6ca21ad1aab5ece161b561f29624051d5bb 100644 --- a/composer.json +++ b/composer.json @@ -6,7 +6,7 @@ "php": ">=7.3", "ext-json": "*", "api-platform/core": "^2.6.8", - "dbp/relay-core-bundle": "^0.1.43", + "dbp/relay-core-bundle": "^0.1.91", "guzzlehttp/guzzle": "^7.0", "nelmio/cors-bundle": "^2.1.0", "phpdocumentor/reflection-docblock": "^3.0 || ^4.0 || ^5.0", diff --git a/composer.lock b/composer.lock index 7d1327bad8595eefc71cd559b541c872a038ad75..e71970cc9080f1fde28e3930f9bd64bfce1ff1db 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "abc5449bb576c1b2ea5470c1a89eac93", + "content-hash": "761a0a5c53c0a9f436610b677c1090ca", "packages": [ { "name": "api-platform/core", @@ -169,16 +169,16 @@ }, { "name": "dbp/relay-core-bundle", - "version": "v0.1.90", + "version": "v0.1.91", "source": { "type": "git", "url": "https://github.com/digital-blueprint/relay-core-bundle.git", - "reference": "da90f97ea72c6e0361fa18de31dc0e0c141b1376" + "reference": "9a93c21af9466b47f9763420d668f49c5bf08ac8" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/digital-blueprint/relay-core-bundle/zipball/da90f97ea72c6e0361fa18de31dc0e0c141b1376", - "reference": "da90f97ea72c6e0361fa18de31dc0e0c141b1376", + "url": "https://api.github.com/repos/digital-blueprint/relay-core-bundle/zipball/9a93c21af9466b47f9763420d668f49c5bf08ac8", + "reference": "9a93c21af9466b47f9763420d668f49c5bf08ac8", "shasum": "" }, "require": { @@ -246,9 +246,9 @@ "description": "The core bundle of the Relay API gateway", "support": { "issues": "https://github.com/digital-blueprint/relay-core-bundle/issues", - "source": "https://github.com/digital-blueprint/relay-core-bundle/tree/v0.1.90" + "source": "https://github.com/digital-blueprint/relay-core-bundle/tree/v0.1.91" }, - "time": "2023-03-06T13:46:06+00:00" + "time": "2023-03-23T08:54:16+00:00" }, { "name": "doctrine/annotations", @@ -10106,5 +10106,5 @@ "platform-overrides": { "php": "7.3" }, - "plugin-api-version": "2.3.0" + "plugin-api-version": "2.2.0" } diff --git a/src/DataProvider/OrganizationDataProvider.php b/src/DataProvider/OrganizationDataProvider.php index a2bc68d5d0667a695ce7d55cb5db5a907cb70a18..a33413456dc0e59cb994e031596d264f7cf8638a 100644 --- a/src/DataProvider/OrganizationDataProvider.php +++ b/src/DataProvider/OrganizationDataProvider.php @@ -8,10 +8,7 @@ use Dbp\Relay\BaseOrganizationBundle\API\OrganizationProviderInterface; use Dbp\Relay\BaseOrganizationBundle\API\OrganizationsByPersonProviderInterface; use Dbp\Relay\BaseOrganizationBundle\Entity\Organization; use Dbp\Relay\CoreBundle\DataProvider\AbstractDataProvider; -use Dbp\Relay\CoreBundle\Exception\ApiError; use Dbp\Relay\CoreBundle\Locale\Locale; -use Symfony\Component\HttpFoundation\RequestStack; -use Symfony\Component\HttpFoundation\Response; class OrganizationDataProvider extends AbstractDataProvider { @@ -21,14 +18,10 @@ class OrganizationDataProvider extends AbstractDataProvider /** @var OrganizationsByPersonProviderInterface */ private $organizationsByPersonProvider; - /** @var RequestStack */ - private $requestStack; - - public function __construct(OrganizationProviderInterface $organizationProvider, OrganizationsByPersonProviderInterface $organizationsByPersonProvider, RequestStack $requestStack) + public function __construct(OrganizationProviderInterface $organizationProvider, OrganizationsByPersonProviderInterface $organizationsByPersonProvider) { $this->organizationProvider = $organizationProvider; $this->organizationsByPersonProvider = $organizationsByPersonProvider; - $this->requestStack = $requestStack; } protected function getResourceClass(): string @@ -36,12 +29,16 @@ class OrganizationDataProvider extends AbstractDataProvider return Organization::class; } - protected function getItemById($id, array $options = []): object + protected function isUserGrantedOperationAccess(int $operation): bool + { + return $this->isUserAuthenticated(); + } + + protected function getItemById($id, array $filters = [], array $options = []): object { //------------------------------------------------------------------------- // @deprecate 'lang' query parameter is deprecate, use 'Accept-Language' header instead - $queryParameters = $this->requestStack->getCurrentRequest()->query->all(); - $this->tryAddDeprecatedLangQueryParameter($options, $queryParameters); + $this->tryAddDeprecatedLangQueryParameter($options, $filters); //------------------------------------------------------------------------- return $this->organizationProvider->getOrganizationById($id, $options); @@ -58,10 +55,6 @@ class OrganizationDataProvider extends AbstractDataProvider // @deprecate The 'person' filter is deprecate. Use the 'identifiers' filter in your custom organization wrapper. $personId = $filters['person'] ?? ''; if ($personId !== '') { - if ($personId !== $this->getUser()->getUserIdentifier()) { - throw new ApiError(Response::HTTP_UNAUTHORIZED, 'only allowed with ID of currently logged-in person'); - } - $organizations = []; foreach ($this->organizationsByPersonProvider->getOrganizationsByPerson($personId, $options) as $organizationId) { $organizations[] = $this->organizationProvider->getOrganizationById($organizationId, $options); diff --git a/src/DependencyInjection/Configuration.php b/src/DependencyInjection/Configuration.php index 19fca8e676ae8c061b394c00abf78d7b8ae6acc6..fb8df8df3ce73af012dca8a2818492fe33386e35 100644 --- a/src/DependencyInjection/Configuration.php +++ b/src/DependencyInjection/Configuration.php @@ -4,6 +4,8 @@ declare(strict_types=1); namespace Dbp\Relay\BaseOrganizationBundle\DependencyInjection; +use Dbp\Relay\BaseOrganizationBundle\DataProvider\OrganizationDataProvider; +use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition; use Symfony\Component\Config\Definition\Builder\TreeBuilder; use Symfony\Component\Config\Definition\ConfigurationInterface; @@ -13,6 +15,11 @@ class Configuration implements ConfigurationInterface { $treeBuilder = new TreeBuilder('dbp_relay_base_organization'); + /** @var ArrayNodeDefinition $rootNode */ + $rootNode = $treeBuilder->getRootNode(); + + $rootNode->append(OrganizationDataProvider::getLocalDataConfigNodeDefinition()); + return $treeBuilder; } } diff --git a/src/DependencyInjection/DbpRelayBaseOrganizationExtension.php b/src/DependencyInjection/DbpRelayBaseOrganizationExtension.php index 41f506e4c8cfa09543c11907310d7ce69307b0ea..d4bebf2a5deb9609076d80fa2617f38791c5f015 100644 --- a/src/DependencyInjection/DbpRelayBaseOrganizationExtension.php +++ b/src/DependencyInjection/DbpRelayBaseOrganizationExtension.php @@ -4,6 +4,7 @@ declare(strict_types=1); namespace Dbp\Relay\BaseOrganizationBundle\DependencyInjection; +use Dbp\Relay\BaseOrganizationBundle\DataProvider\OrganizationDataProvider; use Dbp\Relay\CoreBundle\Extension\ExtensionTrait; use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; @@ -23,5 +24,8 @@ class DbpRelayBaseOrganizationExtension extends ConfigurableExtension new FileLocator(__DIR__.'/../Resources/config') ); $loader->load('services.yaml'); + + $defintion = $container->getDefinition(OrganizationDataProvider::class); + $defintion->addMethodCall('setConfig', [$mergedConfig]); } }