src/Security/Voter/ContextVoter.php line 14

Open in your IDE?
  1. <?php
  2. namespace App\Security\Voter;
  3. use Oz\ApiNvl\Model\User;
  4. use Oz\ApiNvl\Model\Context;
  5. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  6. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  7. use Symfony\Component\Security\Core\User\UserInterface;
  8. /**
  9.  *
  10.  */
  11. class ContextVoter extends Voter
  12. {
  13.     // TODO: Numy ?
  14.     public const HAS_COMMANDES              'HAS_COMMANDES';
  15.     public const HAS_LIVRAISON              'HAS_LIVRAISON';
  16.     public const HAS_FACTURES               'HAS_FACTURES';
  17.     public const HAS_CONTRATS               'HAS_CONTRATS';
  18.     public const HAS_TICKET                 'HAS_TICKET';
  19.     public const HAS_OS                     'HAS_OS';
  20.     public const HAS_DETAIL_CONSO_TELEPHONE 'HAS_DETAIL_CONSO_TELEPHONE';
  21.     public const HAS_DEVIS                  'HAS_DEVIS';
  22.     public const HAS_CONTRAT_ASSISTANCE     'HAS_CONTRAT_ASSISTANCE';
  23.     public const HAS_MAILS                  'HAS_MAILS';
  24.     // public const IVELEM     = 'IVELEM';
  25.     public const NOVENCI    'NOVENCI';
  26.     public const IDLINE     'IDLINE';
  27.     public const VAELIA     'VAELIA';
  28.     // public const EXPERT_COM = 'EXPERT_COM';
  29.     // public const MVUE       = 'MVUE';
  30.     /**
  31.      * Determines if the attribute and subject are supported by this voter.
  32.      *
  33.      * @param string $attribute An attribute
  34.      * @param mixed  $subject   The subject to secure, e.g. an object the user wants to access or any other PHP type
  35.      *
  36.      * @return bool
  37.      */
  38.     protected function supports(string $attribute$subject): bool
  39.     {
  40.         return in_array($attribute, [
  41.             self::HAS_COMMANDES,
  42.             self::HAS_LIVRAISON,
  43.             self::HAS_FACTURES,
  44.             self::HAS_CONTRATS,
  45.             self::HAS_TICKET,
  46.             self::HAS_OS,
  47.             self::HAS_DETAIL_CONSO_TELEPHONE,
  48.             self::HAS_CONTRAT_ASSISTANCE,
  49.             self::HAS_DEVIS,
  50.             // self::IVELEM,
  51.             self::NOVENCI,
  52.             self::IDLINE,
  53.             self::VAELIA,
  54.             // self::EXPERT_COM,
  55.             // self::MVUE,
  56.             self::HAS_MAILS,
  57.         ]);
  58.     }
  59.     /**
  60.      * Perform a single access check operation on a given attribute, subject and token.
  61.      * It is safe to assume that $attribute and $subject already passed the "supports()" method check.
  62.      *
  63.      * @param string         $attribute
  64.      * @param mixed          $subject
  65.      * @param TokenInterface $token
  66.      *
  67.      * @return bool
  68.      */
  69.     protected function voteOnAttribute(string $attribute$subjectTokenInterface $token): bool
  70.     {
  71.         /** @var User $user */
  72.         $user $token->getUser();
  73.         if (!$user instanceof User) {
  74.             return false;
  75.         }
  76.         $selectedContextSlug array_map(function (Context $context) {
  77.             return $context->getSlug();
  78.         }, $user->getContexts() ?? []);
  79.         switch ($attribute) {
  80.             case self::HAS_COMMANDES:
  81.             case self::HAS_LIVRAISON:
  82.                 return count(array_intersect(['ivelem''novenci''idline''expertcom''mvue''expertcom-gedimat'], $selectedContextSlug));
  83.             case self::HAS_FACTURES:
  84.                 return count(array_intersect(['ivelem''novenci''idline''vaelia''expertcom''expertcom-gedimat''mvue'], $selectedContextSlug));
  85.             case self::HAS_MAILS:
  86.             case self::HAS_DETAIL_CONSO_TELEPHONE:
  87.                 return count(array_intersect(['idline'], $selectedContextSlug));
  88.             case self::HAS_CONTRATS:
  89.             case self::HAS_TICKET:
  90.             case self::HAS_OS:
  91.             case self::HAS_DEVIS:
  92.                 return true;
  93.             // case self::IVELEM:
  94.             //     return in_array('ivelem', $selectedContextSlug);
  95.             case self::NOVENCI:
  96.                 return in_array('novenci'$selectedContextSlug);
  97.             case self::IDLINE:
  98.                 return in_array('idline'$selectedContextSlug);
  99.             case self::VAELIA:
  100.                 return in_array('vaelia'$selectedContextSlug);
  101.             case self::HAS_CONTRAT_ASSISTANCE:
  102.                 return !count(array_intersect(['expertcom''expertcom-gedimat'], $selectedContextSlug));
  103.             // case self::EXPERT_COM:
  104.             //     return count(array_intersect(['expertcom', 'expertcom-gedimat'], $selectedContextSlug));
  105.             // case self::MVUE:
  106.             //     return in_array('mvue', $selectedContextSlug);
  107.         }
  108.         return false;
  109.     }
  110. }