Reputation: 119
I'm new to Symfony (Currently using Symfony 3.2) and I'm learning how to create event listener for run my random functions before every controllers. My goal is to check by isGranted() function that user is logged or not. Take a look at my code
> parameters:
> # parameter_name: value
>
> services:
> app.form_login_authenticator:
> class: AppBundle\Security\FormLoginAuthenticator
> arguments: ["@router", "@security.password_encoder"]
> app.init.action_listener:
> class: AppBundle\EventListener\InitListener
> tags:
> - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
> <?php namespace AppBundle\EventListener;
>
> use AppBundle\Controller\InitController; use
> Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use
> Symfony\Component\HttpKernel\Event\FilterControllerEvent; use
> Symfony\Component\HttpFoundation\Session\Session;
>
> class InitListener {
>
> public function onKernelController(FilterControllerEvent $event)
> {
> $controller = $event->getController();
>
>
>
> //if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY'))
> //{
> // do somehting
> //}else{
> // do somehting
> //}
> if ($controller[0] instanceof InitController) {
>
> }
> if (!is_array($controller)) {
> return;
> }
>
>
> }
> }
What should I do to use isGranted() function inside my InitListener?
Upvotes: 2
Views: 5553
Reputation: 1055
Obviously you should pass security.authorization_checker
into your listener.
First in config
app.init.action_listener:
class: AppBundle\EventListener\InitListener
arguments: ["@security.authorization_checker"]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }
and then in the code
<?php namespace AppBundle\EventListener;
use AppBundle\Controller\InitController;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface
class InitListener {
protected $authorizationChecker;
public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
$this->authorizationChecker = $authorizationChecker;
}
public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();
if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
// DO YOUR STUFF
}
if ($controller[0] instanceof InitController) {
}
if (!is_array($controller)) {
return;
}
}
}
Upvotes: 6