2016-04-14 11 views
0

Ich habe auf meiner Silex-Website einen gesicherten Bereich eingerichtet. Ich muss den Benutzernamen in der Kopfzeile anzeigen, wenn der Benutzer verbunden ist, oder einen Link zum Anmeldeformular, wenn der Benutzer nicht verbunden ist. Wenn sich der Benutzer jedoch auf einer Seite befindet, die nicht gesichert ist (außerhalb der Firewall), ist app.user nicht definiert.Silex - Zugriff für Benutzer außerhalb eines gesicherten Bereichs

Ich habe versucht this Lösung, aber es funktioniert nicht.

Hier ist meine Sicherheitskonfiguration:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
     'account' => array(
      'pattern' => '^/account', 
      'form' => array('login_path' => '/login', 'check_path' => '/account/login_check'), 
      'users' => $app->share(function() use ($app) { 
       return new UserProvider($app['db']); 
      }), 
     ), 
     'unsecured' => array(
      'anonymous' => true, 
     ), 
    ) 
)); 

Und hier meine Header, wo ich den Benutzernamen bin Anzeige:

{% if app.user %} 
    {{ app.user.username }}<br /> 
     <a href="{{ path('account') }}">Mon compte</a> 
    {% else %} 
     <a href="{{ path('login') }}">se connecter</a><br /> 
     <a href="{{ path('signup') }}">créer un compte</a> 
{% endif %} 

Antwort

1

Sie Firewall alle Anwendungen erweitern können durch pattern-^/ modifizieren und erlauben anonym Zugang 'anonymous' => true. Wege, die sicher sein sollte, in security.access_rules

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
    'security.firewalls' => array(
     'account' => array(
      'pattern' => '^/', 
      'form' => array('login_path' => '/login', 'check_path' => '/login_check'), 
      'users' => $app->share(function() use ($app) { 
       return new UserProvider($app['db']); 
      }), 
      'anonymous' => true, 
     ) 
    ) 
)); 

$app['security.access_rules'] = array(
    array('^/account', 'ROLE_USER', null) 
); 

Benutzermethode angeben getRoles() zurückgeben soll Rolle ROLE_USER, die bedeutet, dass Benutzer Zugriff auf alle Pfade von security.access_rules mit Rolle ROLE_USER.

class User implements \Symfony\Component\Security\Core\User\AdvancedUserInterface 
{ 
... 
    public function getRoles() 
    { 
     return array(new \Symfony\Component\Security\Core\Role\Role('ROLE_USER')); 
    } 
... 
} 
+0

Boom, es funktioniert, danke! –

Verwandte Themen