2016-08-06 10 views
-1

Ich benutze das Symfony FOS userBundle, alles funktioniert gut bis auf eine Sache.Symfony2 FOS Login mit Rollencheck

Ich möchte auf einer Benutzeranmeldung überprüfen, ob der Benutzer eine bestimmte Rolle hat. Wenn nicht, muss die Anmeldung fehlschlagen. Gibt es eine Möglichkeit, dies zu tun? Ich habe das halbe Internet durchsucht, kann aber keine Lösung finden.

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 }

So kann die Anmeldung nur gelingen, wenn der Benutzer ROLE_PARENT hat. Es muss fehlschlagen, wenn es ROLE_ADMIN oder ROLE_SUPERADMIN ohne ROLE_PARENT hat.

Antwort

1

Ich glaube nicht, dass FOSUserBundle so etwas bietet, und Sie brauchen keins. Sie können eine Custom User Checkers verwenden. Hier ist die doc, die es im Detail erklärt. Nachdem Sie die Klasse UserChecker integriert haben, können Sie die Anmeldung unter der Methode checkPreAuth mit Ihrer benutzerdefinierten Nachricht einschränken.

Ein kleiner Code-Schnipsel:

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; 
    } 
} 

Arbeiten in meiner Reihe von Projekten. Hoffe es hilft!

0

Vielen Dank, das funktioniert!

Denken Sie daran:

  • Sie benötigen mindestens Symfony 2.8 für dieses

  • Sie benötigen einen user_checker für alle Ihre gesicherten Bereichen in Ihrer Firewall

+0

Aber 'Userchecker definieren 'arbeitet für mich in' Symfony 2.7' – Jeet

Verwandte Themen