Mamy system, w którym administratorzy i zwykli użytkownicy są obsługiwani przez ich własnych oddzielnych dostawców zabezpieczeń. Spowodowało to problem na stronach administracyjnych, ponieważ administratorzy nie mają dostępu do plików ani obrazów znajdujących się za zaporą strony głównej, chyba że są również zalogowani do witryny głównej.Symfony 2: Dostęp do zapory sieciowej z dwoma oddzielnymi dostawcami
Obrazy i pliki muszą być dostępne dla wszystkich uwierzytelnionych użytkowników i administratorów, niezależnie od dostawcy. Są podawane za pośrednictwem kontrolera, który zapewnia dokładniejszą kontrolę dostępu.
Czy można zdefiniować więcej niż jednego dostawcę, aby zezwolić na dostęp do trasy?
Oto okrojona wersja naszego obecnego security.yml:
security:
providers:
admin_user_db:
entity: { class: OurAdminUserBundle:AdminUser, property: username }
site_user_db:
entity: { class: OurSiteUserBundle:SiteUser, property: username }
firewalls:
admin_login:
pattern: ^/admin/login$
security: false
site_user_login:
pattern: ^/login
security: false
file_route:
pattern: ^/file
anonymous: ~
### We need to allow this route only for authorized users from
### either admin_user_db or site_user_db providers
admin_secured_area:
pattern: ^/admin
http_basic: ~
provider: admin_user_db
form_login:
check_path: /admin/login_check
login_path: /admin/login
logout:
path: /admin/logout
target:/
site_secured_area:
pattern: .*
http_basic: ~
provider: site_user_db
form_login:
check_path: /check_login
login_path: /login
failure_path: /login
failure_forward: false
logout:
path: /logout
target:/
Dziękuję za odpowiedź, udało nam się skonfigurować 'ChainProvider' z tymi instrukcjami (chociaż myślę, że składnia była nieco inna w nasza wersja Symfony). Ostatecznie skończyło się porzucenie 'AdminUser' i użycie ról zamiast tego, jak sugeruje @jperovic, ponieważ zdaliśmy sobie sprawę, że oddzielni dostawcy nie są naprawdę potrzebni w naszym scenariuszu. – Kaivosukeltaja