예제 #1
0
 /**
  * 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();
         }
     }
 }
예제 #2
0
 /**
  * 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());
     }
 }