<?php
namespace Aqarmap\Bundle\UserBundle\EventListener;
use Aqarmap\Bundle\NotificationBundle\Types\UserWasLogged;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
class AdminLoginListener implements EventSubscriberInterface
{
/**
* @var EventDispatcherInterface
*/
private $eventDispatcher;
/**
* @var AuthorizationCheckerInterface
*/
private $authorizationChecker;
/**
* @var TokenStorageInterface
*/
private $tokenStorage;
public function __construct(
EventDispatcherInterface $eventDispatcher,
AuthorizationCheckerInterface $authorizationChecker,
TokenStorageInterface $tokenStorage
) {
$this->eventDispatcher = $eventDispatcher;
$this->authorizationChecker = $authorizationChecker;
$this->tokenStorage = $tokenStorage;
}
public function onAdminLogin(InteractiveLoginEvent $event): void
{
if ($this->authorizationChecker->isGranted('ROLE_ADMIN')) {
$user = $this->tokenStorage->getToken()->getUser();
$dispatcher = $this->eventDispatcher;
$userWasLoggedEvent = (new UserWasLogged())->setSubject($user)->setInteractiveLoginEvent($event);
$dispatcher->dispatch($userWasLoggedEvent, 'user.was.logged');
}
}
public static function getSubscribedEvents()
{
return [
'aqarmap.login.success' => 'onAdminLogin',
];
}
}