5

access_controlの下に自分のブロックがあるとしましょうsecurity.yml:

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

この場合、誰もがページに入ることができhomepageますreset-password。しかし、匿名で認証されたユーザーにのみこれらのページを許可したいと思います。完全に認証されたユーザーは、403 access denied errorまたはを取得する必要があり404 page not foundます。

ドキュメントによると、allow_ifI should be ablo to create role expressions to define access. しかし、私がこのようにすると:

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

現在、完全に認証されたユーザー (ログイン済み) はページへのアクセスを許可されるべきではなく、匿名で認証されたユーザーはアクセスできるはずですが、残念ながら、どのユーザーもアクセスできません...

私が見逃しているアイデアはありますか?

アップデート

これにより、正解によって次のように機能するようになりました。

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

1 に答える 1

6

IS_*を使用してテストできますhas_role()か? これらはロールのように機能しますが、ロールではありません。たぶんそれが常に返す理由falseです:

is_anonymous()式でis_authenticated()カスタム関数を使用する方がよいようですallow_if

于 2016-10-11T09:06:19.547 に答える