src/Security/PermissionVoter.php line 10

Open in your IDE?
  1. <?php 
  2. namespace App\Security;
  3. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  4. use Symfony\Component\Security\Core\Authorization\AccessDecisionManagerInterface;
  5. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  6. use App\Entity\Permission;
  7. class PermissionVoter extends Voter
  8. {
  9.     const VIEW 'view';
  10.     const EDIT 'edit';
  11.     const WAREHOUSE_VIEW 'warehouse_view';
  12.     const WAREHOUSE_EDIT 'warehouse_edit';
  13.     const TRANSFER_EDIT 'transfer_edit';
  14.     const TICKET_VIEW 'ticket_view';
  15.     /**
  16.      * @var AccessDecisionManagerInterface
  17.      */
  18.     private $decisionManager;
  19.     public function __construct(AccessDecisionManagerInterface $decisionManager)
  20.     {
  21.         $this->decisionManager $decisionManager;
  22.     }
  23.     protected function supports(string $attributemixed $subject): bool
  24.     {
  25.         if (!in_array($attribute, array(self::VIEWself::EDITself::WAREHOUSE_VIEWself::WAREHOUSE_EDITself::TRANSFER_EDITself::TICKET_VIEW))) {
  26.             return false;
  27.         }
  28.         return true;
  29.     }
  30.     protected function voteOnAttribute(string $attributemixed $subjectTokenInterface $token): bool
  31.     {
  32.         $user $token->getUser();
  33.         $actualPermission $subject;
  34.         $warehouseId $subject;
  35.         $transferId $subject;
  36.         $ticketId $subject;
  37.         switch ($attribute) {
  38.             case self::VIEW:
  39.                 if ($user->getPermissionType($actualPermission) == "R" || $user->getPermissionType($actualPermission) == "RW"){
  40.                     return true;
  41.                 }
  42.                 break;
  43.             case self::EDIT:
  44.                 if ($user->getPermissionType($actualPermission) == "RW"){
  45.                     return true;
  46.                 }
  47.                 break;
  48.             case self::WAREHOUSE_VIEW:
  49.                 if ($user->getPermissionWarehouse($warehouseId) == "R" || $user->getPermissionWarehouse($warehouseId) == "RW"){
  50.                     return true;
  51.                 }
  52.                 break;
  53.             case self::WAREHOUSE_EDIT:
  54.                 if ($user->getPermissionWarehouse($warehouseId) == "RW"){
  55.                     return true;
  56.                 }
  57.                 break;
  58.             case self::TRANSFER_EDIT:
  59.                 if ($user->getPermissionTransfer($transferId)){
  60.                     return true;
  61.                 }
  62.                 break;
  63.             case self::TICKET_VIEW:
  64.                 if ($user->getPermissionTicket($ticketId)){
  65.                     return true;
  66.                 }
  67.                 break;
  68.         }
  69.         return false;
  70.     }
  71. }