Можно ли создать несколько пользовательских классов Voter для разных сущностей в symfony?
Я проверяю текущего пользователя, есть ли у него разрешение на удаление Post
в PostController и удалите Product
в ProductController. Я видел https://symfony.com/doc/current/security/voters.html и https://medium.com/@galopintitouan/using-symfony-security-voters-to-check-user-permissions-with-ease-9a48e2d45540. Затем я создаю 2 настраиваемых класса избирателя, расширяетSymfony\Component\Security\Core\Authorization\Voter\Voter
являются PostVoter
а также ProductVoter
. Два класса избирателей имеют одно и то же тело в функцииvoteOnAttribute($attribute, $subject, TokenInterface $token)
. Они отличаются только функциейsupports($attribute, $subject)
.
В PostVoter:
public function supports($attribute, $subject)
{
return $subject instanceof Post && in_array($attribute, ['view','edit','delete']);
}
В ProductVoter:
public function supports($attribute, $subject)
{
return $subject instanceof Product && in_array($attribute, ['view','edit','delete']);
}
Если в PostController, deleteAction, я пишу:
$post = new Post();
if (!$this->isGranted('delete', $post))
{
return false;
}
Это сработало, как я и ожидал. Но если я напишу:
$post = new Product();
if (!$this->isGranted('delete', $post))
{
return false;
}
Он не проходит PostVoter, но проходит ProductVoter. Как я могу решить эту проблему?