Symfony, проверьте, принял ли пользователь новый T & C - PullRequest
0 голосов
/ 24 мая 2018

Мне нужно проверить, принял ли пользователь последнюю политику конфиденциальности, прежде чем запускать какой-либо контроллер.Примерно так:

if($user->getAcceptedTnc() < 2) // unless I'm in some specific routes...
{
    return $this->render('app/privacyPolicy.html.twig');

    // or alternatively do AppController::privacyPolicyAction()
}

Где это можно сделать?Я думал о выходе всех пользователей и вставке этого в прослушиватель аутентификации ...

1 Ответ

0 голосов
/ 25 мая 2018

Я решил с помощью прослушивателя onKernelController, поэтому я проверяю каждую загрузку страницы:

public function onKernelController(FilterControllerEvent $event)
{
    // [ return on some conditions (ajax calls, specific controller/routes, ...) ]

    /** @var User $user */
    $user = $this->token ? $this->token->getUser() : null;

    if($user && $user !== 'anon.' && $user->getLastAcceptedTerms() < Utils::CURRENT_TERMS_VERSION) {

        // [ return if the user is non-EU, has specific roles, etc...]

        // The user must accept the new Terms. Show him AppController:privacyPolicyAction
        $request = new Request();
        $request->attributes->set('_controller', 'App\Controller\AppController:privacyPolicyAction');
        $event->setController($this->controllerResolver->getController($request));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...