<?php
namespace App\EventListener;
use App\Entity\User;
use App\Repository\AuthGrantRepository;
use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\ObjectNormalizer;
use Lexik\Bundle\JWTAuthenticationBundle\Event\AuthenticationSuccessEvent;
class AuthenticationSuccessListener
{
private $authGrantRepository;
public function __construct(AuthGrantRepository $authGrantRepository)
{
$this->authGrantRepository = $authGrantRepository;
}
public function onAuthenticationSuccessResponse(AuthenticationSuccessEvent $event)
{
$user = $event->getUser();
if ($user) {
$loggedUserData = $user->getLoginData();
$roles = $user->getRoles();
$allRoles = $this->authGrantRepository->findAll();
$ability = [];
foreach($allRoles as $foo){
foreach ($roles as $userRole){
if (in_array($userRole, $foo->getRoles())){
$ability[] = [
'action'=>$foo->getAction()->getName(),
'aubject'=>$foo->getSubject()->getName(),
'inverted'=>$foo->getInverted(),
'conditions'=>$foo->getConditions()
];
break;
}
}
}
$loggedUserData['grants'] = $ability;
$event->setData([
'code' => $event->getResponse()->getStatusCode(),
'token' => $event->getData()['token'],
'user' => $loggedUserData
]);
}
}
}