Можно ли создать несколько пользовательских классов 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. Как я могу решить эту проблему?

0 ответов

Другие вопросы по тегам