Задать вопрос
@yalex1442

Symfony2 права доступа к функционалу сайта. Какие механизмы использовать?

Добрый вечер Тостер!
Например нужно реализовать проверку капчи для обычного юзера, но не проверять для админа и т.п.

Как правильнее это реализовать, логигу проверки капчи: описывать прямо в контроллере или выносить проверку куда-то во вне? Куда\как общепринято?

Капчу я оформил как сервис .А как оформить когда нужно/не нужно пользоваться сервисом капчи?

UPD: Удалось найти возможность в SF2 создавать поле в type form не прикрепленное к entity,
т.е есть возможность проверять это поле не используя entity полученных данных
//namespace AppBundle\Form\Type;
//src: ...types/type.php

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder->add('name')->add('Поиск', 'submit');
        if (1)//if from $options
        {
$builder->add('recaptcha', 'ewz_recaptcha', array(
    'mapped'      => false,
        'constraints' => array(
            new RecaptchaTrue()
        )
    ));        }

    }


Бандл с рекапчей https://github.com/excelwebzone/EWZRecaptchaBundle
  • Вопрос задан
  • 352 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
by25
@by25
Веб-разработчик
Проверять в контроллере валидность значения капчи - нормальная практика.

Если используются стандартные формы, то в FormType можно передать опцию вида "show_capcha" и в buildForm() иходя из значения "show_capcha" показывать поле капчи или нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
ну вот там где выводите и решайте. И где проверяете... Где удобно там и можно. В симфони есть встроенные проверки аля isGranted
Ответ написан
Комментировать
@GrizliK1988
Можно еще сделать примерно следующим образом:

1. Добавить фабрику, которая будет возвращать одну из 2х форм (с капчей или без), причем форма с капчей будет наследоваться от формы без капчи.
2. Данная фабрика уже будет сама решать что отдать пользователю либо на основе security.authorization_checker->isGranted (что потребует создание Voter), либо на основе конфигурации бандла.

Тем самым контроллер не будет содержать лишней для него логики (правило 5-10-20 symfony.com/doc/current/best_practices/controllers...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы