<?php
/*
* Author: Dominik Piekarski <code@dompie.de>
* Created at: 2020/08/25 16:31
*/
declare(strict_types=1);
namespace App\Lib\Payment\Voter;
use App\Dictionary\Permission;
use App\Entity\Account;
use App\Entity\PaymentProcess;
use App\Service\Payment\PaymentReferenceService;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
class HasPaymentProcessVoter extends Voter
{
protected PaymentReferenceService $service;
public function __construct(PaymentReferenceService $service)
{
$this->service = $service;
}
protected function supports(string $attribute, $subject): bool
{
return Permission::ALLOWED_TO_BOOK === $attribute && $subject instanceof Account;
}
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$process = $this->service->findUnusedForMember($subject->getMember());
if (!$process instanceof PaymentProcess) {
throw PaymentVoterException::missingPaymentProcess();
}
return true;
}
}