РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1231 of 1361 menu

Команда make:voter

Команда make:voter генерирует класс Voter, который используется в системе безопасности Symfony для проверки прав пользователя на доступ к ресурсу. Первым параметром передаётся имя класса voter. После выполнения команды в проекте появляется готовый класс с методом vote, который возвращает результат проверки.

Синтаксис

php bin/console make:voter VoterName

Пример

Давайте создадим voter для проверки прав на редактирование статьи:

php bin/console make:voter ArticleVoter

Результат выполнения команды:

created: src/Security/Voter/ArticleVoter.php Success! Next: Open your new voter class and add your logic.

Пример

Давайте посмотрим на сгенерированный класс voter:

<?php namespace AppSecurityVoter; use SymfonyComponentSecurityCoreAuthorizationVoterVoter; use SymfonyComponentSecurityCoreAuthorizationVoterVote; use SymfonyComponentSecurityCoreAuthenticationTokenTokenInterface; class ArticleVoter extends Voter { protected function supports(string $attribute, mixed $subject): bool { return false; } protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool { return false; } } ?>

Пример

Давайте реализуем логику проверки для атрибута EDIT над объектом статьи:

<?php namespace AppSecurityVoter; use AppEntityArticle; use AppEntityUser; use SymfonyComponentSecurityCoreAuthorizationVoterVoter; use SymfonyComponentSecurityCoreAuthenticationTokenTokenInterface; class ArticleVoter extends Voter { protected function supports(string $attribute, mixed $subject): bool { return $attribute === 'EDIT' && $subject instanceof Article; } protected function voteOnAttribute(string $attribute, mixed $subject, TokenInterface $token): bool { $user = $token->getUser(); if (!$user instanceof User) { return false; } return $subject->getAuthor() === $user; } } ?>

Пример

Давайте используем voter в контроллере для проверки прав текущего пользователя:

<?php namespace AppController; use AppEntityArticle; use SymfonyBundleFrameworkBundleControllerAbstractController; use SymfonyComponentHttpFoundationResponse; use SymfonyComponentRoutingAttributeRoute; use SymfonyComponentSecurityHttpAttributeIsGranted; class ArticleController extends AbstractController { #[Route('/article/{id}/edit', name: 'article_edit')] #[IsGranted('EDIT', subject: 'article')] public function edit(Article $article): Response { return new Response('article'); } } ?>

Смотрите также

  • команда make:user,
    которая создаёт класс пользователя для системы безопасности
  • команда make:auth,
    которая генерирует аутентификацию через формы
  • команда debug:firewall,
    которая показывает настройки firewall и voters
  • команда make:controller,
    которая создаёт класс контроллера
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить