2016-08-06 5 views
-1

私はSymfony FOS userBundleを使用していますが、1つを除いてすべて正常に動作します。Symfony2ロールチェック付きFOSログイン

ユーザーが特定の役割を持っているかどうかを確認するために、ユーザーのログインを行います。そうでない場合、ログインは失敗する必要があります。これを行う方法はありますか?私はインターネットの半分を探しましたが、解決策を見つけることはできません。

security: 
 
    encoders: 
 
     FOS\UserBundle\Model\UserInterface: bcrypt 
 

 
    role_hierarchy: 
 
     ROLE_PARENT:  ROLE_USER 
 
     ROLE_ADMIN:  ROLE_PARENT 
 
     ROLE_SUPER_ADMIN: ROLE_ADMIN 
 

 
    providers: 
 
     fos_userbundle: 
 
      id: fos_user.user_provider.username 
 

 
    firewalls: 
 
     main: 
 
      pattern: ^/    
 
      form_login: 
 
       provider: fos_userbundle 
 
       csrf_provider: form.csrf_provider     
 

 
      logout:  true 
 
      anonymous: true 
 
     mijn: 
 
      pattern: ^/ 
 
      host: mijn.site 
 
      form_login: 
 
       provider: fos_userbundle 
 
       csrf_provider: form.csrf_provider 
 
       #csrf_token_generator: security.csrf.token_manager 
 
       # if you are using Symfony < 2.8, use the following config instead: 
 
       # csrf_provider: form.csrf_provider 
 

 
      logout:  true 
 
      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 } 
 
     
 
     - { host: mijn.site, path: ^/gegevens, role: IS_AUTHENTICATED_ANONYMOUSLY } 
 
     - { host: mijn.site, path: ^/, roles: ROLE_PARENT }

ユーザーがROLE_PARENTを持っているのであれば、ログインにのみ成功する可能性があります。 ROLE_ADMINまたはROLE_SUPERADMINにROLE_PARENTが指定されていない場合、失敗する必要があります。

答えて

1

私はFOSUserBundleは何も提供していないと思うので、あなたはそれを必要としません。 Custom User Checkersを使用できます。詳細はこちらのdocをご参照ください。 UserCheckerクラスを統合した後、カスタムメッセージでcheckPreAuthメソッドの下でログインするユーザーを制限できます。

小さなコードスニペット:プロジェクトの私のカップルで

public function checkPreAuth(UserInterface $user) 
{ 
    if (!in_array('ROLE_PARENT', $user->getRoles()) { 
     $ex = new DisabledException('Only Parent Users are allowed to login!'); 
     $ex->setUser($user); 
     throw $ex; 
    } 
} 

作品。 お手伝い願います!

0

多くの場合、これは大変です!

は覚えておいてください:

  • をあなたがあなたのファイアウォールで

+0

をALLあなたの確保領域のためのuser_checkerを定義する必要があります。しかし、 'Usercheckerこの

  • のために少なくともsymfonyの2.8が必要'はSymfony 2.7で私のために働いています – Jeet

  • 関連する問題