2016-08-06 50 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

非常感謝,此作品!

記住:

  • 至少需要Symfony的2.8這個

  • 您需要定義爲所有安全領域user_checker在防火牆

+0

但是,'Userchecker '在'Symfony 2.7'中爲我工作 – Jeet