src/Security/Voter/FeuilleRouteStrategiqueVoter.php line 28

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. /**
  4.  * @author      Mehrez Labidi
  5.  */
  6. namespace App\Security\Voter;
  7. use App\Services\Annonces\Elites\RechercheElite;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  10. use Symfony\Component\HttpFoundation\RequestStack;
  11. use App\Services\ManagerEntity\DroitsAccesManagers;
  12. use Symfony\Component\Security\Core\Security;
  13. use Doctrine\ORM\EntityManagerInterface;
  14. use App\Entity\{
  15.     DetailCommandeGeneral,
  16.     GrilleAnalysePostMer,
  17.     CommandeGenerale
  18. };
  19. /**
  20.  * Description of FeuilleRouteStrategiqueVoter
  21.  *
  22.  * @author mehrez
  23.  */
  24. class FeuilleRouteStrategiqueVoter extends Voter {
  25.     public const ROLE_FEUILLE_ROUTE_STRATEGIQUE 'ROLE_FEUILLE_ROUTE_STRATEGIQUE';
  26.     private $em;
  27.     private $dam;
  28.     private $requestStack;
  29.     public function __construct(Security $securityEntityManagerInterface $emDroitsAccesManagers $damRequestStack $requestStack) {
  30.         $this->security $security;
  31.         $this->em $em;
  32.         $this->dam $dam;
  33.         $this->requestStack $requestStack;
  34.     }
  35.     /**
  36.      * Détermine si ce voter prend en charge l'attribut donné.
  37.      *
  38.      * @param  string $attribute L'attribut de sécurité à vérifier
  39.      * @param  mixed  $subject   Le sujet associé à la vérification (non utilisé ici)
  40.      * @return bool   True si l'attribut correspond à ROLE_FEUILLE_ROUTE_STRATEGIQUE
  41.      */
  42.     protected function supports(string $attribute$subject): bool {
  43.         return $attribute === self::ROLE_FEUILLE_ROUTE_STRATEGIQUE;
  44.     }
  45.     /**
  46.      * Vérifie si l'utilisateur connecté possède le droit d'accès au service Elite.
  47.      *
  48.      * @param  string         $attribute L'attribut de sécurité à évaluer
  49.      * @param  mixed          $subject   Le sujet associé (non utilisé ici)
  50.      * @param  TokenInterface $token     Le token d'authentification de l'utilisateur courant
  51.      * @return bool           True si l'utilisateur dispose du droit Elite, false sinon
  52.      */
  53.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool {
  54.         $request $this->requestStack->getCurrentRequest();
  55.         if (!$request || !$subject) {
  56.             return false;
  57.         }
  58.         try {
  59.             $id_annonce $subject['id_annonce'];
  60.             if ($id_annonce == GrilleAnalysePostMer::ID_ANNONCE_EXEMPLE) {
  61.                 return true;
  62.             }
  63.             if(!$this->security->getUser()){
  64.                 return false;
  65.             }
  66.             $qb $this->em->createQueryBuilder(); // feuille de route commandé à l'unité sans acces ELITE
  67.             $result $qb->select('COUNT(cd.id_objet_commande)')
  68.                     ->from(CommandeGenerale::class, 'c')
  69.                     ->leftJoin(DetailCommandeGeneral::class, 'cd''WITH''cd.id_commande_generale = c.id_commande_generale')
  70.                     ->where('c.id_utilisateur = :id_utilisateur')->setParameter('id_utilisateur'$this->security->getUser()->getId())
  71.                     ->andWhere('cd.type_objet_commande = :type_objet_commande')->setParameter('type_objet_commande''feuille_route')
  72.                     ->andWhere('c.etat = :etat')->setParameter('etat''acces_active')
  73.                     ->andWhere('cd.id_objet_commande = :id_annonce')->setParameter('id_annonce'$id_annonce)
  74.                     ->getQuery()
  75.                     ->getSingleScalarResult();
  76.             return ($result 0);
  77.         } catch (\Exception $e) {
  78.             return false;
  79.         }
  80.     }
  81. }