src/EventListener/JWTCreatedListener.php line 42

Open in your IDE?
  1. <?php
  2. // src/App/EventListener/JWTCreatedListener.php
  3. namespace App\EventListener;
  4. use App\Repository\RoleAclRepository;
  5. use App\Repository\UserAclRepository;
  6. use Lexik\Bundle\JWTAuthenticationBundle\Event\JWTCreatedEvent;
  7. use Symfony\Component\HttpFoundation\RequestStack;
  8. use App\Repository\UserRepository;
  9. use App\Repository\UserRolesRepository;
  10. class JWTCreatedListener
  11. {
  12.     /**
  13.      * @var RequestStack
  14.      */
  15.     private $requestStack;
  16.     private $userRepo;
  17.     private $userAclRepo;
  18.     private $userRoleRepo;
  19.     private $roleAclRepo;
  20.     /**
  21.      * @param RequestStack $requestStack
  22.      */
  23.     public function __construct(RequestStack $requestStackUserRepository $userRepoUserAclRepository $userAclRepoUserRolesRepository $userRoleRepoRoleAclRepository $roleAclRepo)
  24.     {
  25.         $this->requestStack $requestStack;
  26.         $this->userRepo $userRepo;
  27.         $this->userAclRepo $userAclRepo;
  28.         $this->userRoleRepo $userRoleRepo;
  29.         $this->roleAclRepo $roleAclRepo;
  30.     }
  31.     /**
  32.      * @param JWTCreatedEvent $event
  33.      *
  34.      * @return void
  35.      */
  36.     public function onJWTCreated(JWTCreatedEvent $event)
  37.     {
  38.         $request $this->requestStack->getCurrentRequest();
  39.         $payload       $event->getData();
  40.         $payload['ip'] = $request->getClientIp();
  41.         $user $this->userRepo->findOneBy(['username'=>$payload['username']]);
  42.         $payload['id'] = $user->getId();
  43.         $fullName $user->getUsername();
  44.         $payload['type'] = $user->getType();
  45.         $payload['actif'] = $user->isIsActivated();
  46.         $payload['resetPassword'] = $user->isIsResetPassword();
  47.         $payload['userAcl'] = [];
  48.         $payload['roleAcl'] = [];
  49.         $permissionsAcl $this->userAclRepo->findBy(['owner'=>$user]);
  50.         $tab = [];
  51.         if(count($permissionsAcl) > 0){
  52.             foreach ($permissionsAcl as $key => $permission) {
  53.                 $tab[$key]['action'] = $permission->getActionSlug();
  54.                 $tab[$key]['ressource'] = $permission->getRessourceSlug();
  55.             }
  56.         }
  57.         $payload['userAcl'] = $tab;
  58.         $userRoles $this->userRoleRepo->findBy(['owner'=>$user]);
  59.         $roleTab = [];
  60.         if(count($userRoles) > 0){
  61.             foreach ($userRoles as $key => $ur) {
  62.                 $roleTab = [$ur->getRole()->getName()];
  63.                 $permissionRoleAcls $this->roleAclRepo->findBy(['role'=>$ur]);
  64.                 if(count($permissionRoleAcls) > 0) {
  65.                     foreach ($permissionRoleAcls as $key => $perm) {
  66.                         $roleTab[$ur->getRole()->getName()][$key]['action'] = $perm->getActionSlug();
  67.                         $roleTab[$ur->getRole()->getName()][$key]['action'] = $perm->getRessourceSlug();
  68.                     }
  69.                 }
  70.             }
  71.         }
  72.         $payload['roleAcl'] = $roleTab;
  73.         
  74.         switch ($user->getType()) {
  75.             case 'agent_ants':
  76.                 if($user->getAgent())
  77.                 $fullName $user->getAgent()->getLastName().' '.$user->getAgent()->getFirstName();
  78.                 break;
  79.             
  80.             case 'fiche':
  81.             case 'donneur':
  82.                 if($user->getFiche())
  83.                 $fullName $user->getFiche()->getLastName().' '.$user->getFiche()->getFirstName();
  84.                 break;
  85.             
  86.             case 'ong':
  87.                 if($user->getOng())
  88.                 $fullName $user->getOng()->getDenomination();
  89.                 break;
  90.         }
  91.         $payload['fullName'] = $fullName;
  92.         $event->setData($payload);
  93.         $header        $event->getHeader();
  94.         $header['cty'] = 'JWT';
  95.         $event->setHeader($header);
  96.     }
  97. }