/** * Authenticate * * @param Event $event * * @return Response\RedirectResponse * @throws Forbidden * @throws \Rad\DependencyInjection\Exception\ServiceNotFoundException */ public function authenticate(Event $event) { /** @var Auth $authentication */ $auth = $this->getContainer()->get('auth'); if ($this->needsAuthentication($event->getData()['action'])) { if (!$auth->isAuthenticated()) { $event->setResult(new Response\RedirectResponse(self::LOGIN_ROUTE)); return null; } if (!$this->isAuthorized($event->getData()['action'])) { throw new Forbidden(); } } }
/** * Call listener * * @param array|Closure|object $callable * @param Event $event */ protected function callListener($callable, Event $event) { if ($callable instanceof Closure || is_array($callable)) { call_user_func_array($callable, array_filter([$event, $event->getSubject(), $event->getData()])); } elseif (is_object($callable)) { $callable->{$event->getType()}($event, $event->getSubject(), $event->getData()); } }