Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony]Symfony 2 - uwierzytelnienie
Forum PHP.pl > Forum > PHP > Frameworki
wiewiorek
Bazując na tym artykule: http://symfony.com/doc/current/book/securi...-authentication staram się zrobić by po odwiedzeniu stron zaczynających się na '/admin' następowało przekierowanie do strony logowania, ale odwiedzenie np. linka http://localhost:81/app_dev.php/admin/edycja-strony/1 powoduje wyświetlenie strony zamiast przekierowanie do formularza logowania. Nie wiem z czego to wynika, zrobiłem tak jak w tym artykule modyfikując plik /app/config/security.yml:

  1. security:
  2. encoders:
  3. Symfony\Component\Security\Core\User\User: plaintext
  4.  
  5. role_hierarchy:
  6. ROLE_ADMIN: ROLE_USER
  7. ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
  8.  
  9. providers:
  10. in_memory:
  11. users:
  12. #user: { password: userpass, roles: [ 'ROLE_USER' ] }
  13. admin: { password: haslo123, roles: [ 'ROLE_ADMIN' ] }
  14.  
  15. firewalls:
  16. dev:
  17. pattern: ^/(_(profiler|wdt)|css|images|js)/
  18. security: false
  19.  
  20. login:
  21. pattern: ^/demo/secured/login$
  22. security: false
  23.  
  24. secured_area:
  25. pattern: ^/
  26. form_login:
  27. check_path: /demo/secured/login_check
  28. login_path: /demo/secured/login
  29. logout:
  30. path: /demo/secured/logout
  31. target: /demo/
  32. anonymous: ~
  33. http_basic:
  34. realm: "Secured Demo Area"
  35.  
  36. access_control:
  37. - { path: ^/admin, roles: ROLE_ADMIN }
  38. #- { path: ^/login, roles: IS_AUTHENTICATED_ANONYMOUSLY, requires_channel: https }
  39. #- { path: ^/_internal, roles: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 }



Więc powinno chyba zadziałać, nie rozumiem co jest nie tak. Cache mam wyczyszczone. Może jest to coś związanego z routingiem, w pliku /src/Acme/StronaBundle/Resources/config/routing.yml mam np.:
  1. AcmeStronaBundle_edycjaStrony:
  2. pattern: /admin/edycja-strony/{id}
  3. defaults: { _controller: AcmeStronaBundle:Strona:edycjaStrony }
  4. requirements:
  5. id: \d+
destroyerr
No właśnie nie powinno działać tak jak tego oczekujesz. Przeczytaj jeszcze raz jakie są różnicę między autentykacją i autoryzacją.
Potrzebujesz zmienić firewalle, np. dodać wpis:
Kod
security:
    firewalls:
        admin:
            pattern:    ^/admin
            anonymous: false

Plus do tego jeszcze konfiguracja entry point.

Z routingiem nie ma to nic wspólnego.
wiewiorek
Dlaczego dalej mi adresy zaczynające się od /admin nie są zabezpieczone przed dostępem niezalogowanych userów sad.gif

destroyerr w dokumentacji http://symfony.com/doc/current/book/securi...-authentication jest wyraźnie napisane "Any URL matching /admin/* is secured, and only the admin user can access it;" poniżej zamieszczonego kodu więc nie trzeba dodawać Twojej reguły (która nawiasem mówiąc i tak nie działa) - o co biega?? sad.gif
destroyerr
Oczywiście, że nic nie trzeba dodawać. Miałeś problem, to podałem Ci rozwiązanie czyli minimalną konfigurację. U mnie na czystej instalacji działało.
W dokumentacji jest tak napisane, bo wpis dla firewalla wymusza autentykację dla każdej ścieżki. Wpis w access_controll wymaga roli admin dla ścieżki zaczynającej się od admin.

Załóż nowy projekt, spróbuj skonfigurować wg mojej propozycji. Jeśli nie będzie działać spakuj, wrzuć gdzieś i mogę sprawdzić.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.