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: if($user->getPermissionType($actualPermission) == "R" || $user->getPermissionType($actualPermission) == "RW") return true; break;
  39.             case self::EDIT: if($user->getPermissionType($actualPermission) == "RW") return true; break;
  40.             case self::WAREHOUSE_VIEW: if($user->getPermissionWarehouse($warehouseId) == "R" || $user->getPermissionWarehouse($warehouseId) == "RW") return true; break;
  41.             case self::WAREHOUSE_EDIT: if($user->getPermissionWarehouse($warehouseId) == "RW") return true; break;
  42.             case self::TRANSFER_EDIT: if($user->getPermissionTransfer($transferId)) return true; break;
  43.             case self::TICKET_VIEW: if($user->getPermissionTicket($ticketId)) return true; break;
  44.         }
  45.         return false;
  46.     }
  47. }