<?php
namespace App\Tasks\Security\Voter;
use App\Core\Entity\User;
use App\Tasks\Entity\Task;
use Symfony\Component\Security\Core\Authorization\Voter\Voter;
use Symfony\Component\Security\Core\Authentication\Token\TokenInterface;
final class TaskVoter extends Voter
{
const CHECK_TASK_ALLOWED_ISSUE = 'check_task_allowed_issue';
/**
* {@inheritdoc}
*/
public function supports(string $attribute, $subject): bool
{
return $subject instanceof Task && in_array($attribute, [
self::CHECK_TASK_ALLOWED_ISSUE,
]);
}
/**
* {@inheritdoc}
*
* @param Task $subject
*/
protected function voteOnAttribute(string $attribute, $subject, TokenInterface $token): bool
{
$user = $token->getUser();
if (!$user instanceof User) {
return false;
}
if ($attribute === self::CHECK_TASK_ALLOWED_ISSUE) {
return in_array($subject->getType(), [
Task::TYPE_MILESTONE,
Task::TYPE_OR,
Task::TYPE_DOR,
Task::TYPE_OC_ORR,
Task::TYPE_OC_OTK,
Task::TYPE_FDS,
Task::TYPE_OC,
Task::TYPE_OC_OSZ,
Task::TYPE_OSZ,
Task::TYPE_OC_TUNEL,
]);
}
return false;
}
}