src/V4/Voters/QuoteVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\V4\Voters;
  3. use App\Security\SecurityConfig;
  4. use App\Security\User;
  5. use LogicException;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\Security;
  9. class QuoteVoter extends Voter
  10. {
  11.     const QUOTE_MANAGE_LIST 'quote_manage_list';
  12.     const QUOTE_SHOW_LIST 'quote_show_list';
  13.     const QUOTE_ADD_EDIT 'quote_add_edit';
  14.     const QUOTE_DUPLICATE 'quote_duplicate';
  15.     const QUOTE_REGENERATE_PRICES 'quote_regenerate_prices';
  16.     const QUOTE_MANAGE_FIELDS 'quote_manage_fields';
  17.     const QUOTE_STATE_ADD_EDIT 'quote_state_add_edit';
  18.     const QUOTE_REASON_ADD_EDIT 'quote_reason_add_edit';
  19.     const QUOTE_LINES_EXPORT_PDF 'quote_lines_export_pdf';
  20.     /**
  21.      * @var Security
  22.      */
  23.     private $security;
  24.     public function __construct(Security $security)
  25.     {
  26.         $this->security $security;
  27.     }
  28.     /**
  29.      * @param $attribute
  30.      * @param $subject
  31.      *
  32.      * @return bool
  33.      */
  34.     protected function supports($attribute$subject): bool
  35.     {
  36.         return in_array($attribute, [
  37.             self::QUOTE_MANAGE_LIST,
  38.             self::QUOTE_SHOW_LIST,
  39.             self::QUOTE_ADD_EDIT,
  40.             self::QUOTE_DUPLICATE,
  41.             self::QUOTE_REGENERATE_PRICES,
  42.             self::QUOTE_MANAGE_FIELDS,
  43.             self::QUOTE_STATE_ADD_EDIT,
  44.             self::QUOTE_REASON_ADD_EDIT,
  45.             self::QUOTE_LINES_EXPORT_PDF,
  46.         ], true);
  47.     }
  48.     /**
  49.      * @param $attribute
  50.      * @param $subject
  51.      * @param TokenInterface $token
  52.      *
  53.      * @return bool
  54.      *
  55.      * @throws LogicException
  56.      */
  57.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  58.     {
  59.         $user $token->getUser();
  60.         if (!$user instanceof User) {
  61.             return false;
  62.         }
  63.         switch ($attribute) {
  64.             case self::QUOTE_MANAGE_LIST:
  65.                 return $this->canQuoteManageList();
  66.             case self::QUOTE_SHOW_LIST:
  67.                 return $this->canQuoteShowList();
  68.             case self::QUOTE_ADD_EDIT:
  69.                 return $this->canQuoteAddEdit();
  70.             case self::QUOTE_DUPLICATE:
  71.                 return $this->canQuoteDuplicate();
  72.             case self::QUOTE_REGENERATE_PRICES:
  73.                 return $this->canQuoteRegeneratePrices($user);
  74.             case self::QUOTE_MANAGE_FIELDS:
  75.                 return $this->canQuoteManageFields();
  76.             case self::QUOTE_STATE_ADD_EDIT:
  77.                 return $this->canQuoteStateAddEdit();
  78.             case self::QUOTE_REASON_ADD_EDIT:
  79.                 return $this->canQuoteReasonAddEdit();
  80.             case self::QUOTE_LINES_EXPORT_PDF:
  81.                 return $this->canExportQuotesPdf();
  82.         }
  83.         throw new LogicException('This should never happen');
  84.     }
  85.     private function canQuoteManageList(): bool
  86.     {
  87.         return $this->canAccessQuote();
  88.     }
  89.     private function canQuoteShowList(): bool
  90.     {
  91.         return $this->canAccessQuote();
  92.     }
  93.     private function canQuoteAddEdit(): bool
  94.     {
  95.         return $this->canAccessQuote();
  96.     }
  97.     private function canQuoteDuplicate(): bool
  98.     {
  99.         return $this->canAccessQuote();
  100.     }
  101.     /**
  102.      * @param User $user
  103.      *
  104.      * @return bool
  105.      */
  106.     private function canQuoteRegeneratePrices(User $user): bool
  107.     {
  108.         return in_array(SecurityConfig::QUOTE_REGENERATE_PRICES$user->getRoles(), true);
  109.     }
  110.     private function canQuoteManageFields(): bool
  111.     {
  112.         return $this->canAccessQuote();
  113.     }
  114.     private function canQuoteStateAddEdit(): bool
  115.     {
  116.         return $this->canAccessQuote();
  117.     }
  118.     private function canQuoteReasonAddEdit(): bool
  119.     {
  120.         return $this->canAccessQuote();
  121.     }
  122.     /**
  123.      * @return bool
  124.      */
  125.     private function canExportQuotesPdf(): bool
  126.     {
  127.         return $this->canAccessQuote();
  128.     }
  129.     /**
  130.      * @TODO: Si le client n'a pas le droit "quote show", il peut tout de même voir les devis qu'il gère.
  131.      *
  132.      * @return bool
  133.      */
  134.     private function canAccessQuote(): bool
  135.     {
  136.         return true;
  137.     }
  138. }