2017-02-19 8 views
3

Ich benutze symfony 3.2.3, und ich möchte den Zugriff auf die gleichen Seiten beschränken. Ok, kein Problem! Konfigurieren von security.yml, alles kann getan werden, und tatsächlich funktioniert es in der Entwicklungsumgebung. Aber wenn ich meine Symfony-Site im Produktionsmodus umschalte, funktioniert nichts mehr!symfony Sicherheit prod funktioniert nicht

Schaltbefehle prod:

  • php bin \ Konsole Cache: klar --env = prod --no-debug

Ich habe 4 Seiten:

  • /Homepage (kann auf alle zugreifen)
  • /Glück (kann auf alle zugreifen)
  • /auth_a rea (nur angemeldeten Benutzern Zugriff)
  • /Backend (nur ROLE_ADMIN Benutzer zugreifen)

Hier mein security.yml

Sicherheit:

encoders: 
    FOS\UserBundle\Model\UserInterface: bcrypt 

role_hierarchy: 
    ROLE_USER_LOGGED: IS_AUTHENTICATED_FULLY 
    ROLE_ADMIN:  ROLE_USER_LOGGED 

providers: 
    fos_userbundle: 
     id: fos_user.user_provider.username 

firewalls: 
    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    default: 
     anonymous: ~ 
     http_basic: ~ 
     form_login: 
      provider: fos_userbundle 
      csrf_token_generator: security.csrf.token_manager 
     logout: 
      path: /logout 
      target:/

access_control: 
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/backend, roles: ROLE_ADMIN } 
    - { path: ^/auth_area, roles: IS_AUTHENTICATED_FULLY } 

Schließlich läuft alles auf dev, nichts funktioniert in prod: anonymer Benutzer kann überall zugreifen! !; (

Vielen Dank im Voraus

+2

an Ihrer Zugangskontrolle Suche dieser Linien sind nutzlos, wenn Sie nur noch 2 spezifische Bereiche mit begrenztem Zugriff: '- {Pfad:^/, Rollen: IS_AUTHENTICATED_ANONYMOUSLY}' und - '{Pfad: ^/login $, Rolle: IS_AUTHENTICATED_ANONYMOUSLY}'. Kommentieren Sie diese 2 Anweisungen, löschen Sie den Cache und versuchen Sie es. PS: Ich denke, die erste Direktive wird immer angepasst und verursacht Ihr Problem. –

Antwort

2

Wie gp_sflover in a comment geschrieben:

PS: Ich denke, die erste Richtlinie ist immer abgestimmt und dazu führen, dass Problem

und in den documentation. :

Für jede eingehende Anfrage, Symfony überprüfen s jeder Eintrag access_control, um einen zu finden, der der aktuellen Anfrage entspricht. Sobald ein übereinstimmender access_control Eintrag gefunden wird, stoppt er - nur der erste passende access_control wird verwendet, um den Zugriff zu erzwingen.

So müssen Sie die Reihenfolge der Regeln ändern und die Regel setzen, die jede Anfrage (path: ^/) am Ende Übereinstimmen:

access_control: 
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/backend, roles: ROLE_ADMIN } 
    - { path: ^/auth_area, roles: IS_AUTHENTICATED_FULLY } 
    - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
+0

Wird '^/login $' benötigt? Es scheint, als wäre es unter "^ /" abgedeckt, und die anderen beiden gelten nicht. –

+1

@JaredFarrish In dem in Ihrer Frage beschriebenen Fall benötigen Sie nur die Direktiven, die den Zugriff verhindern, da die Benutzer bereits auf jede Seite Ihrer Site als 'IS_AUTHENTICATED_ANONYMOUSLY' zugreifen dürfen (dies geschieht, weil jede Firewall' security: true' aktiviert ist) standardmäßig). –

+0

: Ich bin nicht das OP. –

Verwandte Themen