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 :
Les "Roles" sont stockés dans Mysql sous forme d'une array serializée.
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'; } }
et j'ai bien un "User" valide, quand je fais un
j'ai ca :
Code : Sélectionner tout - Visualiser dans une fenêtre à part var_dump($app['security']->getToken());
Ce qui me semble correct ?
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) { } }
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
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 !
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
Merci d'avance aux experts !
Partager