#php #symfony #symfony3
У меня есть две роли role_hierarchy: ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN Мне нужно чтобы для пользователейпосле после авторизации с ролью ADMIN был редирект в /admin А для пользователей с ролью USER был редирект на /user Сейчас в файле security у меня так: firewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager login_path: /login check_path: /login_check always_use_default_target_path: false default_target_path: /admin logout: true anonymous: true Как мне нужно модифицировать security или ещё что-то добавить, чтобы решить задачу?
Ответы
Ответ 1
В разделе firewalls вы должны иметь 2 подраздела. Один для обычных клиентов а второй для менеджеров. И вы можете дать группу страниц которые должны быть доступны для конкретной группе клинентов с помощью pattern. Например pattern: /admin(.*) В итоге у вас должно получиться такой config firewalls: main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager login_path: /login check_path: /login_check always_use_default_target_path: false default_target_path: /user logout: true anonymous: true admin: pattern: /admin(.*) form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager login_path: /login check_path: /admin/login_check always_use_default_target_path: false default_target_path: /admin logout: true anonymous: trueОтвет 2
Если нужно использовать один firewall (например, чтобы авторизованный админ на фронте тоже был авторизован), то можно использовать success_handler в firewall SecurityBundle Configuration security.yml main: pattern: ^/ form_login: provider: fos_userbundle csrf_token_generator: security.csrf.token_manager login_path: /login check_path: fos_user_security_check failure_handler: user.authentication.failure_handler success_handler: user.authentication.success_handler services.yml services: user.authentication.success_handler: class: UserBundle\Security\AuthenticationSuccessHandler arguments: ["@router"] AuthenticationSuccessHandler.php class AuthenticationSuccessHandler implements AuthenticationSuccessHandlerInterface { /** @var I18nRouter */ protected $router; public function __construct(I18nRouter $router) { $this->router = $router; } /** * {@inheritdoc} */ public function onAuthenticationSuccess(Request $request, TokenInterface $token) { /** @var User $user */ $user = $token->getUser(); // Проверяем роль пользователя, генерим url через router, возвращаем ответ с редиректом return $response; } }
Комментариев нет:
Отправить комментарий