2016-10-11 4 views
4

許すのは、私がsecurity.ymlの下で私のaccess_controlブロックを持っていると言うためにセキュリティACCESS_CONTROLを設定します。Symfony2の - だけで認証された匿名で

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

この場合、誰もがhomepagereset-passwordページを入力することalowedされます。しかし、これらのページは匿名で認証されたユーザーにのみ許可したいと考えています。完全に認証されたユーザーには、403 access denied errorまたは404 page not foundが必要です。

documentationallow_ifによると、私はアクセスを定義するロール表現を作成する必要があります。しかし、私はこのようにそれを行う場合:今の考えに完全に認証されたユーザ(ログイン)以下

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

は生憎、ページにアクセスすることを許可し、匿名で認証されたアクセスできるようにする必要がありますが、すべきではない、のどれもユーザーはそれにアクセスすることができます...

アイデアは何ですか?

UPDATE

正解で怒鳴る示唆したように、これは働いてしまった:

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

答えて

5

あなたがhas_role()を使用してIS_*をテストすることができますか?これらは役割のように振る舞いますが、役割ではありません。それは常にfalse返しなぜ多分それはです:あなたはより良いallow_if式でis_anonymous()is_authenticated()カスタム関数を使用する必要があるように思え

+0

それがうまく動作製パーフェクト! ' - {パス:^ /リセットパスワード、allow_if:" is_anonymous()と!is_authenticated() "}' –

関連する問題