src/Security/Voters/TransactionVoter.php line 13

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Security\Voters;
  4. use App\Services\Accounts\ClientAccount\ClientAccountPermissionService;
  5. use App\Entity\Permissions\AccountPermissionSetting;
  6. use App\Entity\Transaction;
  7. use Symfony\Component\Security\Core\Authorization\Voter\Voter;
  8. use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
  9. class TransactionVoter extends Voter
  10. {
  11.     private $clientAccountPermissionService;
  12.     public function __construct(ClientAccountPermissionService $permissionService)
  13.     {
  14.         $this->clientAccountPermissionService $permissionService;
  15.     }
  16.     protected function supports($attribute$subject)
  17.     {
  18.         if (!in_array($attribute$this->getSupportedPermissions())) {
  19.             return false;
  20.         }
  21.         return !(!$subject instanceof Transaction)
  22.          ;
  23.     }
  24.     protected function voteOnAttribute($attribute$subjectTokenInterface $token)
  25.     {
  26.         if (!in_array($attribute$this->getSupportedPermissions())) {
  27.             return false;
  28.         }
  29.         /** @var Transaction $transaction */
  30.         $transaction $subject;
  31.         $payload $this->clientAccountPermissionService->checkTransactions([$transaction->getId()], $attribute);
  32.         return !$payload->hasError();
  33.     }
  34.     private function getSupportedPermissions(): array
  35.     {
  36.         return [
  37.             AccountPermissionSetting::VIEW_ACCOUNT_PERMISSION,
  38.             AccountPermissionSetting::SIGN_TRANSACTIONS_PERMISSION,
  39.             AccountPermissionSetting::INTERNAL_PAYMENT_PERMISSION,
  40.             AccountPermissionSetting::SEPA_PAYMENT_PERMISSION,
  41.         ];
  42.     }
  43. }