IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

[Silex] Firewall [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    489
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 489
    Points : 388
    Points
    388
    Par défaut [Silex] Firewall
    Bonjour,

    Je suis un peu perdu avec la config des firewalls de silex.
    Je fais un petit projet qui utilise Silex, Propel et Twig.
    J'ai besoin d'avoir le site accessible aux utilisateurs anonymes et une partie du site réservée aux administrateurs qui sont enregistrés dans Mysql.

    donc ma config de firewall actuelle :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    $app->register(new Silex\Provider\SecurityServiceProvider(), array(
        'security.firewalls' => array(
            'login' => array('pattern' => '^/login$'), 
            'default' => array(
                'pattern' => '^.*$',
                'anonymous' => true, 
                'form' => array('login_path' => '/login', 'check_path' => '/gestion/login_check'),
                'logout' => array('logout_path' => '/logout'), 
                'users' => $app->share(function() use ($app) {
                    return new Vince\User\UserProvider($app);
                }),
            ),
        ),
        'security.access_rules' => array(
            array('^/.+$', ''),
            array('^/login$', ''),
    	array('^/gestion$', 'ROLE_ADMIN'), 
        )
    ));

    mon UserProvider :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php
    namespace Vince\User;
     
    use Symfony\Component\Security\Core\User\UserProviderInterface;
    use Symfony\Component\Security\Core\User\UserInterface;
    use Symfony\Component\Security\Core\User\User;
    use Symfony\Component\Security\Core\Exception\UsernameNotFoundException;
    use Symfony\Component\Security\Core\Exception\UnsupportedUserException;
    use \Silex\Model as Model;
     
    class UserProvider implements UserProviderInterface
    {
        public function __construct() {}
     
        public function loadUserByUsername($username)
        {
    		$user = Model\PersonQuery::create()->filterByLogin($username)->setIgnoreCase(true)->findOne();
            if (!is_object($user)) {
                throw new UsernameNotFoundException(sprintf('Username "%s" does not exist.', $username));
            }
     
            return new User($user->getLogin(), $user->getPassword(), unserialize($user->getRoles()), true, true, true, true);
        }
     
        public function refreshUser(UserInterface $user)
        {
            if (!$user instanceof User) {
                throw new UnsupportedUserException(sprintf('Instances of "%s" are not supported.', get_class($user)));
            }
     
            return $this->loadUserByUsername($user->getUsername());
        }
     
        public function supportsClass($class)
        {
            return $class === 'Symfony\Component\Security\Core\User\User';
        }
    }
    Les "Roles" sont stockés dans Mysql sous forme d'une array serializée.

    et j'ai bien un "User" valide, quand je fais un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($app['security']->getToken());
    j'ai ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    object(Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken)#260 (6) {
      ["credentials":"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":private]=>
      NULL
      ["providerKey":"Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken":private]=>
      string(7) "default"
      ["user":"Symfony\Component\Security\Core\Authentication\Token\AbstractToken":private]=>
      object(Symfony\Component\Security\Core\User\User)#266 (7) {
        ["username":"Symfony\Component\Security\Core\User\User":private]=>
        string(5) "vince"
        ["password":"Symfony\Component\Security\Core\User\User":private]=>
        string(88) "*****************************"
        ["enabled":"Symfony\Component\Security\Core\User\User":private]=>
        bool(true)
        ["accountNonExpired":"Symfony\Component\Security\Core\User\User":private]=>
        bool(true)
        ["credentialsNonExpired":"Symfony\Component\Security\Core\User\User":private]=>
        bool(true)
        ["accountNonLocked":"Symfony\Component\Security\Core\User\User":private]=>
        bool(true)
        ["roles":"Symfony\Component\Security\Core\User\User":private]=>
        array(1) {
          [0]=>
          string(10) "ROLE_ADMIN"
        }
      }
      ["roles":"Symfony\Component\Security\Core\Authentication\Token\AbstractToken":private]=>
      array(1) {
        [0]=>
        object(Symfony\Component\Security\Core\Role\Role)#262 (1) {
          ["role":"Symfony\Component\Security\Core\Role\Role":private]=>
          string(10) "ROLE_ADMIN"
        }
      }
      ["authenticated":"Symfony\Component\Security\Core\Authentication\Token\AbstractToken":private]=>
      bool(true)
      ["attributes":"Symfony\Component\Security\Core\Authentication\Token\AbstractToken":private]=>
      array(0) {
      }
    }
    Ce qui me semble correct ?

    Donc au niveau comportement, quand je pointe sur /gestion, je suis redirigé sur /login, jusque la, pas de soucis. Je me loggue .. et la j'ai une erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    1/2 AccessDeniedException: Access Denied
     
    puis
     
    2/2 AccessDeniedHttpException: Access Denied
    Une petite idée sur ce que j'ai oublié ou mal configuré ? Je suppose que ca doit être ma config security.firewalls qui n'est pas correcte.. mais je ne vois pas ou !

    Merci d'avance aux experts !

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    489
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 489
    Points : 388
    Points
    388
    Par défaut
    j'y ai perdu un bon moment et apparemment c'etait juste question d'ordre..

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        'security.access_rules' => array(
    		array('^/gestion$', 'ROLE_ADMIN'), 
    		array('^/login$', ''),
    		array('^/.+$', ''),
        )

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/05/2004, 11h29
  2. Le firewall
    Par flatron dans le forum Sécurité
    Réponses: 6
    Dernier message: 03/05/2004, 14h33
  3. Problème avec mon firewall ...
    Par Wis dans le forum Tomcat et TomEE
    Réponses: 15
    Dernier message: 06/04/2004, 08h46
  4. Proxy, tunneling, détournement de firewall
    Par Davide dans le forum Développement
    Réponses: 19
    Dernier message: 08/10/2003, 13h16
  5. Firewall
    Par partyboy dans le forum Sécurité
    Réponses: 5
    Dernier message: 05/08/2003, 07h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo