Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony2][Symfony]Firewall zabezpieczenie strony
Forum PHP.pl > Forum > PHP > Frameworki
borpaw
W jaki sposób można zabezpieczyć dostęp do ścieżki routingu nie wpisując w każdą funkcję kontrolera zabezpieczenia typu:

  1. $securityContext = $this->container->get('security.context');
  2. if (!$securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED')) {
  3. return $this->redirect($this->generateUrl('homepage'));
  4. }


Chodzi o to żeby dostęp był automatycznie zabroniony dla ścieżki rozpoczynającej się od np:

  1. /profil
  2. /profil/new
  3. /profil/delete
  4. /profil/.....


Czy to się da ustawić w security.yml? Z tym, że jeśli się da to jak przekierować na homepage a nie do logowania?
Crozin
Tak, da się. W security.yml:
Kod
security:
  access_control:
    - { path: '^/profil/', role: IS_AUTHENTICATED_REMEMBERED }
borpaw
Próbowałem tego też ale to działa mi tylko na ścieżkę /profil a na /profil/... już nie, może trzeba coś jeszcze dopisać?
Crozin
Pokaż Twój kompletny kod.
borpaw
security.yml

  1. security:
  2. encoders:
  3. FOS\UserBundle\Model\UserInterface: sha512
  4. role_hierarchy:
  5. ROLE_ADMIN: [ROLE_USER, ROLE_SONATA_ADMIN]
  6. ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
  7. SONATA:
  8. - ROLE_SONATA_PAGE_ADMIN_PAGE_EDIT # if you are using acl then this line must be commented
  9.  
  10. providers:
  11. fos_userbundle:
  12. id: fos_user.user_manager
  13.  
  14. firewalls:
  15. # Disabling the security for the web debug toolbar, the profiler and Assetic.
  16. dev:
  17. pattern: ^/(_(profiler|wdt)|css|images|js)/
  18. security: false
  19.  
  20. # -> custom firewall for the admin area of the URL
  21. admin:
  22. pattern: /admin(.*)
  23. context: user
  24. form_login:
  25. provider: fos_userbundle
  26. login_path: /admin/login
  27. use_forward: false
  28. check_path: /admin/login_check
  29. failure_path: null
  30. logout:
  31. path: /admin/logout
  32. anonymous: true
  33.  
  34. # -> end custom configuration
  35.  
  36. # default login area for standard users
  37.  
  38. # This firewall is used to handle the public login area
  39. # This part is handled by the FOS User Bundle
  40. main:
  41. pattern: .*
  42. context: user
  43. form_login:
  44. provider: fos_userbundle
  45. login_path: /
  46. use_forward: false
  47. check_path: /login_check
  48. failure_path: null
  49. always_use_default_target_path: false
  50. default_target_path: /success
  51. logout: true
  52. anonymous: true
  53.  
  54. access_control:
  55. # URL of FOSUserBundle which need to be available to anonymous users
  56. - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
  57. - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
  58. - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
  59.  
  60. # Admin login page needs to be access without credential
  61. - { path: ^/admin/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
  62. - { path: ^/admin/logout$, role: IS_AUTHENTICATED_ANONYMOUSLY }
  63. - { path: ^/admin/login_check$, role: IS_AUTHENTICATED_ANONYMOUSLY }
  64.  
  65. # Secured part of the site
  66. # This config requires being logged for the whole site and having the admin role for the admin part.
  67. # Change these rules to adapt them to your needs
  68. - { path: ^/admin/, role: [ROLE_ADMIN, ROLE_SONATA_ADMIN] }
  69. - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }
  70.  
  71. - { path: ^/profil/, role: [IS_AUTHENTICATED_REMEMBERED] }
Crozin
Masz złą kolejność reguł:
Kod
        - { path: ^/.*, role: IS_AUTHENTICATED_ANONYMOUSLY }  
        - { path: ^/profil/, role: [IS_AUTHENTICATED_REMEMBERED] }
Do pierwszej pasują już wszystkie adresy, a sprawdzanie reguł kończy się na pierwszej pasującej.
borpaw
A widzisz, faktycznie, nie pomyślałem o tym, teraz działa. Dzięki
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.