2012-01-31 1 views
2

私はsymfonyの認証機能と認証機能を利用しようとしていますが、私のsecurity.ymlファイルの外観は多少混乱しています。Symfony2 Security.yml

私は、次の目的を達成するために探しています:

1)ルート/と/参加(everyeoneにavilableている - 何のログインは必要ありません)。

2)他のすべてのルートにはログイン/パスワードが必要です。

3)/ adiminルートは、管理ユーザーのみに限定する必要があります。

4)すべてのユーザーをデータベースに対して認証する必要があります。

私はアイテム4を考え出しました(私は思う) - 以下を参照してください。私はadministrators:単語が何を意味するのかは分かりません。これは、管理者だけがUserクラスを使用することを意味しますか?それはusers:または何か他のものと言うべきでしょうか?

もっと重要なこと
security: 
    encoders: 
     MySite\Bundle\Entity\User: 
      algorithm: sha1 
      encode_as_base64: false 
      iterations: 1 

providers: 
    administrators: (??? what doest his mean ???) 
     entity: { class: MySiteBundle:User } 

- 項目1については

、2、及び3私が入れてよく分かりません。私はfirewalls:セクションとaccess_control:セクションの下にたくさんのエントリを持っていますが、それはちょうどうまくいきません。誰かがsecurity.ymlが私が数字1〜3で達成しようとしている目標だけに見えるべきものを投稿できますか?ここで

答えて

9

は、私はあなたのニーズから理解するものから設定exempleです:

security: 
    encoders: 
     "MySite\Bundle\Entity\User": { algorithm: sha1, encode_as_base64: false, iterations: 1 } 

    providers: 
     database: { entity: "MySite\Bundle\Entity\User" } 

    firewalls: 
     dev: 
      pattern: ^/(_profiler|_wdt|css|js) 
      security: false 

     main: 
      pattern: ^/ 
      provider: database 
      anonymous: true 
      # the rest of your firewall's config 

    access_control: 
     - { path: ^/(join)?$, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/, roles: IS_AUTHENTICATED_FULLY } 

は、私たちは、ユーザエンティティのパスワードエンコーダを設定し、我々はそれのためのプロバイダを定義します。

次に、devファイアウォールを定義して、デバッグ/プロファイラ/アセットパッシブのセキュリティを無効にし、mainをアプリケーションの実際のファイアウォールとします。この最後のファイアウォールは、以前に定義されたユーザープロバイダーを使用し、異種のユーザーを許可します(重要!)。

最後に、アクセス制御マップでは、まず匿名ユーザーに許可されているpathesのルールを定義し、残りのサイトに対してユーザーを完全に認証する必要がある一般ルールを定義します。

4

この質問や似たような質問をしてくれる人は、security.ymlの次の設定を使用してこの問題を解決できました。

security: 
    encoders: 
     MySite\Bundle\Entity\User: 
      algorithm: sha1 
      encode_as_base64: false 
      iterations: 1 

    role_hierarchy: 
     ROLE_ADMIN:  ROLE_USER 
     ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

    providers: 
     database: 
      entity: { class: MySiteBundle:User } 

    firewalls: 
     dev: 
      pattern: ^/(_(profiler|wdt)|css|images|js)/ 
      security: false 
     prod: 
      pattern: ^/ 
      provider: database 
      anonymous: true 
      form_login: 
       check_path: /login_check 
       login_path: /login 
       default_target_path: /home 
       always_use_default_target_path: true 
      logout: 
       path: /logout 
       target:/

    access_control: 
     - { path: ^/admin, roles: ROLE_ADMIN } 
     - { path: ^/build, roles: ROLE_USER } 
     - { path: ^/join, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
     - { path: ^/, roles: IS_AUTHENTICATED_ANONYMOUSLY } 
関連する問題