/**
  * {@inheritDoc}
  */
 public function checkArgumentsEnabled(ActionDispatchEvent $event)
 {
     if (!$event->getAction()->isCheckEnabled()) {
         // Disable check enabled.
         return;
     }
     $parameters = $event->getParameters();
     foreach ($parameters as $parameter) {
         if (is_object($parameter) && $this->enabledChecker->isSupported($parameter)) {
             $this->enabledChecker->check($parameter);
         }
     }
 }
 /**
  * Authorize and authenticate on API method
  *
  * @param ActionDispatchEvent $event
  */
 public function authorize(ActionDispatchEvent $event)
 {
     $callable = $event->getCallable();
     if (!$callable->isMethod() && !$callable->isMethodStatic()) {
         // Native function or \Closure
         return;
     }
     $class = $callable->getReflection()->getDeclaringClass()->getName();
     $method = $callable->getReflection()->getName();
     $parameters = $event->getParameters();
     $action = $event->getAction();
     foreach ($action->getSecurityGroups() as $group) {
         $authorized = $this->authorizationChecker->isGrantedMethodCall($class, $method, $parameters, [], $group);
         if (!$authorized) {
             throw new AccessDeniedException();
         }
     }
 }
 /**
  * On post dispatch
  *
  * @param ActionDispatchEvent $event
  */
 public function onPostDispatch(ActionDispatchEvent $event)
 {
     $message = sprintf('Complete handle API method "%s". Response object: %s', $event->getAction()->getName(), get_class($event->getResponse()));
     $this->logger->debug($message);
 }