2016-10-11 6 views
4

Lassen Sie uns authentifiziert sagen, dass ich meine access_control Block unter dem security.yml haben:Symfony2 - set Sicherheit access_control nur zu erlauben, anonym

access_control: 
    - { path: ^/$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/reset-password, roles: IS_AUTHENTICATED_ANONYMOUSLY } 

In diesem Fall ist jeder homepage und reset-password Seiten eingeben alowed. Aber ich möchte diese Seiten nur für authentifizierte Benutzer anonym zulassen. Vollständig authentifizierte Benutzer sollten eine 403 access denied error oder 404 page not found erhalten.

Nach documentation mit allow_if sollte ich sein, um Rollenausdrücke zu erstellen, um den Zugriff zu definieren. Aber wenn ich es wie folgt aus:

access_control: 
    - { path: ^/reset-password, allow_if: "has_role('IS_AUTHENTICATED_ANONYMOUSLY') and not has_role('IS_AUTHENTICATED_FULLY')" } 

nun die Idee folgenden vollständig authentifizierte Benutzer (angemeldet) sollte nicht erlaubt werden, auf die Seite zuzugreifen und anonym sollte zugreifen können authentifiziert, aber, leider, keine von Benutzer können darauf zugreifen ...

Irgendwelche Ideen, die ich vermisse?

UPDATE

Dies habe es wie vorgeschlagen Arbeits unten durch richtige Antwort:

- { path: ^/reset-password, allow_if: "is_anonymous() and !is_authenticated()" } 

Antwort

5

Sind Sie sicher, dass Sie IS_*has_role() mit testen kann? Diese verhalten sich wie Rollen, aber sie sind keine Rollen. Vielleicht ist das, warum es immer false zurückgibt:

Es scheint, wie Sie besser is_anonymous() und is_authenticated() benutzerdefinierte Funktionen in der allow_if Ausdruck verwendet werden soll.

+0

Perfekt machte es gut funktionieren! '- {Pfad: ^/reset-password, allow_if:" is_anonymous() und! is_authenticated() "}' –

Verwandte Themen