Intereting Posts
Symofny2 Получите список доступных логических имен контроллеров PHP PDO Fetch не работает? Ошибка анализа: синтаксическая ошибка, неожиданное «else» (T_ELSE) Класс Paginator Почему я не могу использовать intergers как индекс в массиве PHP $ _SESSION? Создание ключа PHP RSA Laravel 5.2 -> Валидация Ошибки не появляются Атрибут переменной атрибута: настройка каждого отображаемого текстового значения кнопок радио Переопределить общедоступный метод в подклассе таким образом, чтобы ограничивать доступ к общедоступным данным, сохраняя при этом доступ к родительскому классу? PHP: Как я могу использовать / использовать метод в своем классе? FB Messenger Bot: обновления Webhook не доставляются Вызов функции AppModel в AppController для cakephp Изменение шаблона url для принятия имени пользователя, такого как facebook Начиная с laravel на ubuntu Записанные файлы потеряны, когда пользователь повесил трубку в Asterisk

Symfony2 / FOSUserBundle – перенаправление после входа в систему согласно роли

Я хотел бы настроить перенаправление после входа в систему в соответствии с ролью пользователя.

FYI: я использую symfony 2.8

Я создаю этот класс:

 <?php namespace Users\UsersBundle\Redirection; use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\Security\Core\Security; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Routing\RouterInterface; class AfterLoginRedirection implements AuthenticationSuccessHandlerInterface { protected $router; protected $security; /** * AfterLoginRedirection constructor. * @param Router $router * @param Security $security */ public function __construct(Router $router, Security $security) { $this->router = $router; $this->security = $security; } /** * @param Request $request * @param TokenInterface $token * @return RedirectResponse */ public function onAuthenticationSuccess(Request $request, TokenInterface $token) { if ($this->security->isGranted('ROLE_SUPER_ADMIN')) { $response = new RedirectResponse($this->router->generate('_homepage_admin')); } else { $referer_url = $request->headers->get('referer'); $response = new RedirectResponse($referer_url); } return $response; } } 

Я создаю этот сервис:

 services: redirect.after.login: class: Users\UsersBundle\Redirection\AfterLoginRedirection arguments: [@router] 

Я изменил брандмауэр

  firewalls: main: pattern: ^/ form_login: login_path: fos_user_security_login check_path: fos_user_security_check provider: fos_userbundle csrf_provider: form.csrf_provider success_handler: redirect.after.login logout: path: /users/logout target: / anonymous: true 

И я получил эту ошибку:

Catchable Fatal Error: аргумент 1, переданный пользователям \ UsersBundle \ Redirection \ AfterLoginRedirection :: __ construct () должен быть экземпляром Users \ UsersBundle \ Redirection \ Router, экземпляр Symfony \ Bundle \ FrameworkBundle \ Routing \ Router, указанный в C: \ wamp \ www \ eCommerce \ app \ cache \ dev \ appDevDebugProjectContainer.php в строке 2060 и определяется

Что я пропустил? Какие-нибудь подсказки или советы?

Благодарю.

 <?php namespace Users\UsersBundle\Redirection; use Symfony\Component\Security\Http\Authentication\AuthenticationSuccessHandlerInterface; use Symfony\Component\Security\Core\Authentication\Token\TokenInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\RedirectResponse; use Symfony\Component\Routing\Router; use Symfony\Component\Security\Core\Authorization\AuthorizationChecker; class AfterLoginRedirection implements AuthenticationSuccessHandlerInterface { protected $router; protected $security; /** * AfterLoginRedirection constructor. * @param Router $router * @param AuthorizationChecker $security */ public function __construct(Router $router, AuthorizationChecker $security) { $this->router = $router; $this->security = $security; } public function onAuthenticationSuccess(Request $request, TokenInterface $token) { if ($this->security->isGranted('ROLE_SUPER_ADMIN')) { $response = new RedirectResponse($this->router->generate('_homepage_admin')); } else { $referer_url = $request->headers->get('referer'); $response = new RedirectResponse($referer_url); } return $response; } } 

определение услуги:

 redirect.after.login: class: Users\UsersBundle\Redirection\AfterLoginRedirection arguments: ['@router','@security.authorization_checker'] 

Изменения, которые я сделал:

  • Используйте Router вместо RouterInterface
  • Inject @security.authorization_checker в службу redirect.after.login