Как подключиться из аутентификатора SonataAdmin к другому аутентификатору? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть приложение Symfony, которое находится внутри пакета администрирования Sonata для административной части, с собственным брандмауэром (admin) и брандмауэром для пользовательской части приложения (main).

В настоящее время администратор, связанный с sonata, не может получить доступ к API, предназначенному для пользователя, поскольку он аутентифицирован для аутентификатора Sonata Admin Bundle, а для API он видит его как нулевого пользователя или не прошедшего аутентификацию.

Я хочу разрешить администратору доступ к API, созданному для части приложения, которая находится за брандмауэром для пользовательской части.

Конфигурация для брандмауэров в security.yamlfile:

 firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        admin:
            pattern:            ^/admin(.*)
            form_login:
                provider:       app_user_admin
                login_path:     admin_login
                use_forward:    false
                check_path:     admin_login
                failure_path:   null
            logout:
                path:           admin_logout
                target:         admin_login
            anonymous:          true
            guard:
                authenticators:
                    - App\Security\AdminLoginAuthenticator
        main:
            anonymous: true
            logout:
                path:   security_logout
            guard:
                authenticators:
                    - App\Security\UserLoginAuthenticator

Есть ли способ соединить два аутентификатора для администратора?Например, при успешном входе в систему для администратора, чтобы вызвать аутентификатор для main брандмауэра?

1 Ответ

0 голосов
/ 24 июня 2019

После некоторых копаний и некоторой помощи я обнаружил, что в безопасности Symfony есть что-то вроде этого.

Это называется Контекст Symfony и делает то же самое.

Для дальнейшего использования, это то, что вам действительно нужно добавить в файл конфигурации:

firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false
        admin:
            context: just_a_random_name
            pattern:            ^/admin(.*)
            form_login:
                provider:       app_user_admin
                login_path:     admin_login
                use_forward:    false
                check_path:     admin_login
                failure_path:   null
            logout:
                path:           admin_logout
                target:         admin_login
            anonymous:          true
            guard:
                authenticators:
                    - App\Security\AdminLoginAuthenticator
        main:
            context: just_a_random_name
            anonymous: true
            logout:
                path:   security_logout
            guard:
                authenticators:
                    - App\Security\UserLoginAuthenticator

...