На моем сайте есть 3 раздела: Администратор, Члены и Публичный. Раздел администратора доступен только через «gestion.% Domain%» и должен иметь пользователя-администратора. Этот раздел прекрасно работает.
Для раздела «Участники» он доступен через «membre.% Domain%» и должен иметь пользователя-участника. Это также прекрасно работает.
Проблема доходит до публичного раздела. Каждая часть этого раздела доступна либо анонимно, либо авторизована с помощью пользователя. При входе в систему верхнее меню немного изменится, чтобы отобразить дополнительные параметры (вроде как на любом торговом веб-сайте).
Итак, я настроил свои параметры безопасности следующим образом:
security:
providers:
membre_provider:
id: App\Security\Provider\MembreProvider
manager_provider:
id: App\Security\Provider\ManagerProvider
encoders:
App\Entity\Utilisateur: sha512
role_hierarchy:
ROLE_MEMBRE: [ROLE_NON_MEMBRE]
ROLE_SUPER_ADMIN: [ROLE_ADMIN]
ROLE_ADMIN: [ROLE_EDITEUR]
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
admin:
host: 'gestion.%domain%'
pattern: .*
anonymous: ~
form_login:
login_path: admin_login
check_path: admin_login
access_denied_url: admin_access_denied
provider: manager_provider
logout:
path: admin_logout
target: admin_login
main:
pattern: .*
anonymous: true
form_login:
login_path: membre_login
check_path: membre_login
access_denied_url: membre_login
provider: membre_provider
user_checker: App\Security\MembreUserChecker
logout:
path: membre_logout
target: index
remember_me:
secret: '%kernel.secret%'
name: 'remember_me_main'
lifetime: 604800 # 1 week in seconds
path: /
always_remember_me: true
access_control:
- { path: ^/connexion, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: 'membre.%domain%' }
- { path: ^/demande_reinitialisation, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: 'membre.%domain%' }
- { path: ^/reinitialisation, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: 'membre.%domain%' }
- { path: ^/, roles: ROLE_NON_MEMBRE, host: 'membre.%domain%'}
- { path: ^/connexion, roles: IS_AUTHENTICATED_ANONYMOUSLY, host: 'gestion.%domain%' }
- { path: ^/, roles: ROLE_EDITEUR, host: 'gestion.%domain%'}
- { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY}
Как видите, у меня есть контекст администратора и основной контекст. Основной контекст разделяется между разделами «Члены» и «Публичный». И он работает как задумано при тестировании (на вкладке «Безопасность» профилировщика оба отображаются как «основной» контекст)
Проблема в том, что когда я пытаюсь получить информацию о зарегистрированных пользователя в публичном разделе, я всегда получаю анонимный токен (он даже показывает анонимный токен в профилировщике), но когда я нахожусь в разделе «Участники» Я могу получить зарегистрированного пользователя правильно.
Я полностью потерян там ...