src/Voter/ManagerVoter.php line 11

Open in your IDE?
  1. <?php
  2. namespace App\Voter;
  3. use App\Entity\__Accounting\Supplier;
  4. use App\Entity\Product\MarginCabin;
  5. use Crea\SecurityBundle\Entity\User;
  6. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\User\UserInterface;
  9. class ManagerVoter extends Voter
  10. {
  11.     const DEPOSIT_LIST "MANAGER_DEPOSIT_LIST";
  12.     const DEPOSIT_CREATE "MANAGER_DEPOSIT_CREATE";
  13.     const DEPOSIT_UPDATE "MANAGER_DEPOSIT_UPDATE";
  14.     const DEPOSIT_REMOVE "MANAGER_DEPOSIT_REMOVE";
  15.     const CANCEL_FEE_LIST "MANAGER_CANCEL_FEE_LIST";
  16.     const CANCEL_FEE_CREATE "MANAGER_CANCEL_FEE_CREATE";
  17.     const CANCEL_FEE_UPDATE "MANAGER_CANCEL_FEE_UPDATE";
  18.     const CANCEL_FEE_REMOVE "MANAGER_CANCEL_FEE_REMOVE";
  19.     const BALANCE_BEFORE_DEPARTURE_LIST "MANAGER_BALANCE_BEFORE_DEPARTURE_LIST";
  20.     const BALANCE_BEFORE_DEPARTURE_CREATE "MANAGER_BALANCE_BEFORE_DEPARTURE_CREATE";
  21.     const BALANCE_BEFORE_DEPARTURE_UPDATE "MANAGER_BALANCE_BEFORE_DEPARTURE_UPDATE";
  22.     const BALANCE_BEFORE_DEPARTURE_REMOVE "MANAGER_BALANCE_BEFORE_DEPARTURE_REMOVE";
  23.     const SUPPLIER_LIST "MANAGER_SUPPLIER_LIST";
  24.     const SUPPLIER_CREATE "MANAGER_SUPPLIER_CREATE";
  25.     const SUPPLIER_UPDATE "MANAGER_SUPPLIER_UPDATE";
  26.     const SUPPLIER_REMOVE "MANAGER_SUPPLIER_REMOVE";
  27.     const SUPPLIER_SWITCH_ACTIVE "MANAGER_SUPPLIER_SWITCH_ACTIVE";
  28.     const SUPPLIER_MARGIN_LIST "MANAGER_SUPPLIER_MARGIN_LIST";
  29.     const SUPPLIER_MARGIN_CREATE "MANAGER_SUPPLIER_MARGIN_CREATE";
  30.     const SUPPLIER_MARGIN_UPDATE "MANAGER_SUPPLIER_MARGIN_UPDATE";
  31.     const SUPPLIER_MARGIN_UPDATE_FORCE "MANAGER_SUPPLIER_MARGIN_UPDATE_FORCE";
  32.     const SUPPLIER_MARGIN_DELETE "MANAGER_SUPPLIER_MARGIN_DELETE";
  33.     const PRODUCT_MARGIN_LIST "MANAGER_PRODUCT_MARGIN_LIST";
  34.     const PRODUCT_MARGIN_CREATE "MANAGER_PRODUCT_MARGIN_CREATE";
  35.     const PRODUCT_MARGIN_UPDATE "MANAGER_PRODUCT_MARGIN_UPDATE";
  36.     const PRODUCT_MARGIN_UPDATE_FORCE "MANAGER_PRODUCT_MARGIN_UPDATE_FORCE";
  37.     const PRODUCT_MARGIN_DELETE "MANAGER_PRODUCT_MARGIN_DELETE";
  38.     const PORT_TAXE_LIST "MANAGER_PORT_TAXE_LIST";
  39.     const PORT_TAXE_CREATE "MANAGER_PORT_TAXE_CREATE";
  40.     const PORT_TAXE_UPDATE "MANAGER_PORT_TAXE_UPDATE";
  41.     const PORT_TAXE_REMOVE "MANAGER_PORT_TAXE_REMOVE";
  42.     const APPLICATION_FEE_LIST "MANAGER_APPLICATION_FEE_LIST";
  43.     const APPLICATION_FEE_CREATE "MANAGER_APPLICATION_FEE_CREATE";
  44.     const APPLICATION_FEE_UPDATE "MANAGER_APPLICATION_FEE_UPDATE";
  45.     const APPLICATION_FEE_REMOVE "MANAGER_APPLICATION_FEE_REMOVE";
  46.     const TURNOVER_OBJECTIVE_LIST "MANAGER_TURNOVER_OBJECTIVE_LIST";
  47.     const TURNOVER_OBJECTIVE_CREATE "MANAGER_TURNOVER_OBJECTIVE_CREATE";
  48.     const TURNOVER_OBJECTIVE_UPDATE "MANAGER_TURNOVER_OBJECTIVE_UPDATE";
  49.     const TURNOVER_OBJECTIVE_REMOVE "MANAGER_TURNOVER_OBJECTIVE_REMOVE";
  50.     protected function supports($attribute$subject): bool
  51.     {
  52.         return in_array($attribute, [
  53.             self::DEPOSIT_LIST,
  54.             self::DEPOSIT_CREATE,
  55.             self::DEPOSIT_UPDATE,
  56.             self::DEPOSIT_REMOVE,
  57.             self::CANCEL_FEE_LIST,
  58.             self::CANCEL_FEE_CREATE,
  59.             self::CANCEL_FEE_UPDATE,
  60.             self::CANCEL_FEE_REMOVE,
  61.             self::BALANCE_BEFORE_DEPARTURE_LIST,
  62.             self::BALANCE_BEFORE_DEPARTURE_CREATE,
  63.             self::BALANCE_BEFORE_DEPARTURE_UPDATE,
  64.             self::BALANCE_BEFORE_DEPARTURE_REMOVE,
  65.             self::SUPPLIER_LIST,
  66.             self::SUPPLIER_CREATE,
  67.             self::SUPPLIER_UPDATE,
  68.             self::SUPPLIER_REMOVE,
  69.             self::SUPPLIER_SWITCH_ACTIVE,
  70.             self::SUPPLIER_MARGIN_LIST,
  71.             self::SUPPLIER_MARGIN_CREATE,
  72.             self::SUPPLIER_MARGIN_UPDATE,
  73.             self::SUPPLIER_MARGIN_UPDATE_FORCE,
  74.             self::SUPPLIER_MARGIN_DELETE,
  75.             self::PRODUCT_MARGIN_LIST,
  76.             self::PRODUCT_MARGIN_CREATE,
  77.             self::PRODUCT_MARGIN_UPDATE,
  78.             self::PRODUCT_MARGIN_UPDATE_FORCE,
  79.             self::PRODUCT_MARGIN_DELETE,
  80.             self::PORT_TAXE_LIST,
  81.             self::PORT_TAXE_CREATE,
  82.             self::PORT_TAXE_UPDATE,
  83.             self::PORT_TAXE_REMOVE,
  84.             self::APPLICATION_FEE_LIST,
  85.             self::APPLICATION_FEE_CREATE,
  86.             self::APPLICATION_FEE_UPDATE,
  87.             self::APPLICATION_FEE_REMOVE,
  88.             self::TURNOVER_OBJECTIVE_LIST,
  89.             self::TURNOVER_OBJECTIVE_CREATE,
  90.             self::TURNOVER_OBJECTIVE_UPDATE,
  91.             self::TURNOVER_OBJECTIVE_REMOVE,
  92.         ]);
  93.     }
  94.     protected function voteOnAttribute($attribute$subjectTokenInterface $token): bool
  95.     {
  96.         /** @var User $loggedUser */
  97.         $loggedUser $token->getUser();
  98.         if (!$loggedUser instanceof UserInterface)
  99.             return false;
  100.         switch ($attribute) {
  101.             case self::SUPPLIER_MARGIN_UPDATE:
  102.                 return $this->voteOnSupplierMarginUpdate($subject$loggedUser);
  103.             case self::PRODUCT_MARGIN_UPDATE:
  104.                 return $this->voteOnProductMarginUpdate($subject$loggedUser);
  105.             case self::SUPPLIER_REMOVE:
  106.                 return $this->voteOnRemove($subject$loggedUser);
  107.             default:
  108.                 return in_array($attribute$loggedUser->getRoles());
  109.         }
  110.     }
  111.     private function voteOnSupplierMarginUpdate($subjectUserInterface $loggedUser): bool
  112.     {
  113.         if ($subject === null) {
  114.             return false;
  115.         }
  116.         /** @var MarginCabin $marginCabin */
  117.         $marginCabin $subject;
  118.         if ($marginCabin->getIsArchived() || $marginCabin->getIsDefault()) {
  119.             return in_array(self::SUPPLIER_MARGIN_UPDATE_FORCE$loggedUser->getRoles());
  120.         }
  121.         return in_array(self::SUPPLIER_MARGIN_UPDATE$loggedUser->getRoles());
  122.     }
  123.     private function voteOnProductMarginUpdate($subjectUserInterface $loggedUser): bool
  124.     {
  125.         if ($subject === null) {
  126.             return false;
  127.         }
  128.         /** @var MarginCabin $marginCabin */
  129.         $marginCabin $subject;
  130.         if ($marginCabin->getIsArchived() || $marginCabin->getIsDefault()) {
  131.             return in_array(self::PRODUCT_MARGIN_UPDATE_FORCE$loggedUser->getRoles());
  132.         }
  133.         return in_array(self::PRODUCT_MARGIN_UPDATE$loggedUser->getRoles());
  134.     }
  135.     private function voteOnRemove($subjectUserInterface $loggedUser): bool
  136.     {
  137.         if ($subject === null) {
  138.             return false;
  139.         }
  140.         /** @var Supplier $supplier */
  141.         $supplier $subject;
  142.         if ($supplier->getSupplierPayments()->count() > ||
  143.             $supplier->getContacts()->count() > ||
  144.             $supplier->getDiscounts()->count() > ||
  145.             $supplier->getProducts()->count() > ||
  146.             $supplier->getSaleTerms()->count() > 0) {
  147.             return false;
  148.         }
  149.         return in_array(self::SUPPLIER_REMOVE$loggedUser->getRoles());
  150.     }
  151. }