2012-04-15 13 views
3

Ich versuche herauszufinden, wie zwei separate Anmeldeseiten haben: eine Standardanmeldung für die .com Seite und eine für bestimmte Benutzer, zum Beispiel für die Route /special.Zwei separate Anmeldeseiten in Symfony 2

Ist dies in einem SF2-Projekt problemlos möglich?

UPDATE:

ich die folgende Konfiguration in meiner Firewall haben (ich verwende fosub)

providers: 
    custom: 
     id: ib.user_provider 
    fos_userbundle: 
     id: fos_user.user_manager 
    my_fos_facebook_provider: 
     id: my.facebook.user 

firewalls: 
    special: 
     pattern: ^/special 
     form_login: 
      provider: fos_userbundle 
      login_path: /special/login 
      check_path: /special/login_check 
      use_referer: false 
      default_target_path: /special 
      success_handler: ib.login_handler 
      provider: custom 
    main: 
     pattern: ^/.* 
     form_login: 
      provider: fos_userbundle 
      login_path: /login 
      check_path: /login_check 
      use_referer: false 
      default_target_path:/
      provider: custom 
     fos_facebook: 
      always_use_default_target_path: true 
      app_url: "http://apps.facebook.com/%facebook_app_id%/" 
      server_url: "http://aw.com/aw/web/app_dev.php/" 
      login_path: /login 
      check_path: /login_check/facebook 
      default_target_path: /checkFB 
      success_handler: facebook_auth_success_handler 
      provider: my_fos_facebook_provider 
     logout: 
      #handlers: ["fos_facebook.logout_handler"] 
      target:/
     anonymous: ~ 

Im ib.login_handler ich folgendes haben:

public function onAuthenticationSuccess(Request $request,TokenInterface $token) 
{ 
    if ($this->security->isGranted('ROLE_CATEGORIZER')) 
    { 
     $response = new RedirectResponse($this->router->generate('MyCoBundle_mailAdmin_index')); 
    } 


    return $response; 
} 

Mit Diese Konfiguration, wenn ich zu mydomain.com/special gehe ich bekomme den folgenden Fehler: Fehler: Umleitungsfehler (in Englisch: Fehler: Umleitungsfehler)

UPDATE:

in Chrom erhalte ich: Keine Route für "GET/special/login"

404 Not Found - NotFoundHttpException 
1 linked Exception: ResourceNotFoundException » 

Ich habe keine spezielle Route für diesen Login Weg gefunden haben. Was ich erreichen möchte ist, dass ein spezieller Benutzer nur Zugriff auf Seiten unter dem Pfad/special hat.

Antwort

8

Es ist möglich, Sie können viele geschützte Zonen definieren => viele Firewalls.

die diese App Lassen Sie sehen/config/security.yml Konfiguration zu wissen, wie:

firewalls: 

    dev: 
     pattern: ^/(_(profiler|wdt)|css|images|js)/ 
     security: false 

    special_area: 
     pattern: ^/special 
     anonymous: ~ 
     form_login: 
      check_path: /special/login_check 
      login_path: /special/login 
     logout: 
      path: /special/logout 
      target:/

    general_area: 
     pattern:^
     anonymous: ~ 
     form_login: 
      check_path: /login_check 
      login_path: /login 
     logout: 
      path: /logout 
      target:/


access_control: 
    - { path: ^/_internal, role: IS_AUTHENTICATED_ANONYMOUSLY, ip: 127.0.0.1 } 

    - { path: ^/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 
    - { path: ^/special/login$, role: IS_AUTHENTICATED_ANONYMOUSLY } 

Beachten Sie, dass special_area muss, weil Muster alle andere, die übereinstimmt general_area die oben genereal_area definiert werden. ..

Was Sie in Ihrem Bündel hinzufügen müssen routing.yml:

_security_login_special: 
    pattern: /special/login 
    defaults: { _controller: FOSUserBundle:Security:login } 

_security_check_special: 
    pattern: /special/login_check 

_security_logout_special: 
    pattern: /special/logout 

Und Sie haben eine andere Rolle für general_area hinzufügen, so müssen Sie FOSUserManager außer Kraft zu setzen und es auf diese ergänzende Rolle auf Benutzer loading ... (Mehr Informationen hier: https://github.com/FriendsOfSymfony/FOSUserBundle/blob/1.2.0/Resources/doc/user_manager.md) zu machen hinzufügen

+0

Hallo, danke für Sie Beiträge verfassen . Leider bekomme ich einen Fehler, wenn ich das obige Setup versuche. vielleicht sollte ich meine Firewall-Konfiguration oben veröffentlichen. – ramo

+0

Hallo, bitte posten Sie die ganze Fehlermeldung;) in Englisch wurde mein Deutsch beim Oktoberfet in München gezeichnet;) Sind/login und/special/login entsprechend einer beliebigen Route in Ihrem Routing? – AlterPHP

+0

Was ich am Ende erreichen will, ist nur, dass ein Benutzer mit einer speziellen Rolle nur spezielle Seiten unter/special sehen kann, aber nicht in der Lage sein sollte, andere Seiten für den Standardbenutzer zu sehen. Ich werde die obige Fehlermeldung einfügen. – ramo