0

symfony2 プロジェクトに FOS UserBundle をインストールしました。ログイン/ログアウトは機能しますが、唯一の問題は、システムが閉じたい部分をリダイレクト/閉じないことです。ログインしたユーザーのみがサイト全体にアクセスできるようにする必要があります。それでも、どのルートでも呼び出すことができます。

セキュリティ yml のアクセス制御セクションにデータを入力しましたが、機能しません。mydomain/de_CH/anything/i/want/ を呼び出して、そのコンテンツにアクセスできます。

これは私のsecurity.ymlです:

security:
  providers:
    fos_userbundle:
      id: fos_user.user_provider.username_email

  encoders:
    FOS\UserBundle\Model\UserInterface: sha512

  firewalls:
    main:
      pattern: ^/
      form_login:
        provider: fos_userbundle
        login_path: fos_user_security_login 
        check_path: fos_user_security_check
        csrf_provider: form.csrf_provider
      logout:
        path:   fos_user_security_logout
      anonymous:    true

  access_control:
    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/register, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/resetting, role: IS_AUTHENTICATED_ANONYMOUSLY }
    - { path: ^/admin/, role: ROLE_ADMIN }
    - { path: ^/my-admin/, role: ROLE_ADMIN }
    - { path: ^/$, role: ROLE_USER }
    #- { path: ^/$, role: ROLE_USER }

  role_hierarchy:
    ROLE_ADMIN:       ROLE_USER
    ROLE_SUPER_ADMIN: ROLE_ADMIN
4

2 に答える 2

0

変化する

- { path: ^/$, role: ROLE_USER }

 - { path: ^/.*, role: ROLE_USER }

これは、最初の正規表現がROLE_USERそのパターンでパスを許可することを通知するためです。/
したがって、などのパターン/foo /foo/barはファイアウォールからキャッチされません。

2 番目のパターンは後者のケースをカバーします

于 2013-03-05T09:19:55.663 に答える
0

anonymous: trueパーツを取り外して/login独自のファイアウォールに配置し、ユーザーがログインできるようにします。anonymousパーツにより、匿名ユーザーがそのファイアウォールにアクセスできるようになりました。

firewalls:
    login_firewall:
        pattern:    ^/login$
        anonymous:  ~
    main:
        pattern: ^/
        form_login:
            # ...
        logout:
            path:   fos_user_security_logout

編集:匿名ユーザーのページへのアクセスを拒否したため、別のファイアウォールを作成する必要があります/login。それ以外の場合はログインできません。公式ドキュメントのセクション「一般的な落とし穴を回避する」を参照してください: http://symfony.com/件名の詳細については、doc/current/book/security.htmlを参照してください。

于 2013-03-05T09:22:31.430 に答える