<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="api_platform.security.expression_language" alias="security.expression_language" />

        <service id="api_platform.security.resource_access_checker" class="ApiPlatform\Symfony\Security\ResourceAccessChecker" public="false">
            <argument type="service" id="api_platform.security.expression_language" on-invalid="null" />
            <argument type="service" id="security.authentication.trust_resolver" on-invalid="null" />
            <argument type="service" id="security.role_hierarchy" on-invalid="null" />
            <argument type="service" id="security.token_storage" on-invalid="null" />
            <argument type="service" id="security.authorization_checker" on-invalid="null" />
        </service>
        <service id="ApiPlatform\Symfony\Security\ResourceAccessCheckerInterface" alias="api_platform.security.resource_access_checker" />

        <service id="api_platform.security.listener.request.deny_access" class="ApiPlatform\Symfony\EventListener\DenyAccessListener">
            <argument type="service" id="api_platform.metadata.resource.metadata_collection_factory"></argument>
            <argument type="service" id="api_platform.security.resource_access_checker" />

            <!-- This method must be executed only when the current object is available, before deserialization -->
            <tag name="kernel.event_listener" event="kernel.request" method="onSecurity" priority="3" />
            <!-- This method must be executed only when the current object is available, after deserialization -->
            <tag name="kernel.event_listener" event="kernel.request" method="onSecurityPostDenormalize" priority="1" />
            <!-- This method must be executed only when the current object is available, after validation -->
            <tag name="kernel.event_listener" event="kernel.view" method="onSecurityPostValidation" priority="63" />
        </service>

        <service id="api_platform.security.expression_language_provider" class="ApiPlatform\Symfony\Security\Core\Authorization\ExpressionLanguageProvider" public="false">
            <tag name="security.expression_language_provider" />
        </service>
    </services>

</container>
