Страницы

Поиск по вопросам

среда, 1 января 2020 г.

Symfony 3, разный редирект после авторизации для разных ролей

#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; } }

Комментариев нет:

Отправить комментарий