src/Security/BankPermissionVoter.php line 12

Open in your IDE?
  1. <?php
  2. namespace App\Security;
  3. use App\Entity\BankUser;
  4. use App\Entity\OA2User;
  5. use App\Repository\BankPermissionRepository;
  6. use Doctrine\ORM\EntityManagerInterface;
  7. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  8. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  9. class BankPermissionVoter extends Voter
  10. {
  11.     public const MODE_READ 'read';
  12.     public const MODE_CREATE 'create';
  13.     public const MODE_UPDATE 'update';
  14.     public const MODE_DELETE 'delete';
  15.     public const PERMISSION_TRANSACTIONS 'PERMISSION_TRANSACTIONS';
  16.     public const PERMISSION_CLIENTS 'PERMISSION_CLIENTS';
  17.     public const PERMISSION_ACCOUNTS 'PERMISSION_ACCOUNTS';
  18.     public const PERMISSION_CLIENT_DOCS 'PERMISSION_CLIENT_DOCS';
  19.     public const PERMISSION_ORG_SETS 'PERMISSION_ORG_SETS';
  20.     public const PERMISSION_PRODUCTS 'PERMISSION_PRODUCTS';
  21.     public const PERMISSION_RULES 'PERMISSION_RULES';
  22.     public const PERMISSION_LIQUIDITY 'PERMISSION_LIQUIDITY';
  23.     public const PERMISSION_ANY 'PERMISSION_ANY';
  24.     public const PERMISSION_AML 'PERMISSION_AML';
  25.     /**
  26.      * @var EntityManagerInterface
  27.      */
  28.     private $entityManager;
  29.     /**
  30.      * @var BankPermissionRepository
  31.      */
  32.     private $bankPermissionRepository;
  33.     public function __construct(EntityManagerInterface $entityManagerBankPermissionRepository $bankPermissionRepository)
  34.     {
  35.         $this->entityManager $entityManager;
  36.         $this->bankPermissionRepository $bankPermissionRepository;
  37.     }
  38.     protected function supports($attribute$subject)
  39.     {
  40.         if (!in_array($attribute, [self::MODE_READself::MODE_CREATEself::MODE_UPDATEself::MODE_DELETE])) {
  41.             return false;
  42.         }
  43.         return !(gettype($subject) !== 'string')
  44.          ;
  45.     }
  46.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  47.     {
  48.         /** @var OA2User $user */
  49.         $user $token->getUser();
  50.         if (!$user instanceof OA2User || !$user->isBankUser()) {
  51.             // the user must be logged in; if not, deny access
  52.             return false;
  53.         }
  54.         /** @var string $permissionName */
  55.         $permissionName $subject;
  56.         /** @var BankUser $bankUser */
  57.         $bankUser $user->getBankUser();
  58.         switch ($attribute) {
  59.             case self::MODE_READ:
  60.                 return $this->canRead($permissionName$bankUser);
  61.                 break;
  62.             case self::MODE_CREATE:
  63.                 return $this->canCreate($permissionName$bankUser);
  64.                 break;
  65.             case self::MODE_UPDATE:
  66.                 return $this->canUpdate($permissionName$bankUser);
  67.                 break;
  68.             case self::MODE_DELETE:
  69.                 return $this->canDelete($permissionName$bankUser);
  70.                 break;
  71.         }
  72.         // throw new \LogicException( 'This code should not be reached');
  73.     }
  74.     private function canRead(string $permissionNameBankUser $bankUser): bool
  75.     {
  76.         $permission $permissionName === self::PERMISSION_ANY
  77.             $this->bankPermissionRepository->findByReadAnyPermission($bankUser)
  78.             : $this->bankPermissionRepository->findByReadPermission($permissionName$bankUser);
  79.         return (bool) $permission;
  80.     }
  81.     private function canCreate(string $permissionNameBankUser $bankUser): bool
  82.     {
  83.         return ($this->bankPermissionRepository->findByCreatePermission($permissionName$bankUser))
  84.             ? true
  85.             false
  86.             ;
  87.     }
  88.     private function canUpdate(string $permissionNameBankUser $bankUser): bool
  89.     {
  90.         return ($this->bankPermissionRepository->findByUpdatePermission($permissionName$bankUser))
  91.             ? true
  92.             false
  93.             ;
  94.     }
  95.     private function canDelete(string $permissionNameBankUser $bankUser): bool
  96.     {
  97.         return ($this->bankPermissionRepository->findByDeletePermission($permissionName$bankUser))
  98.             ? true
  99.             false
  100.             ;
  101.     }
  102. }