2016-09-29 2 views
0

Ich habe ein Problem mit Feuerstein, ich verstehe nicht, warum er mich nie zum Test ROLE zurückgibt. Mein aktueller Benutzer ist die eine Show mit $ username isGranted aber gibt mir nur FALSE zurück.Testing Rolle Silex

Haben Sie eine Idee?

$token = $app['security.token_storage']->getToken(); 
$user = $token->getUser(); 
echo $username = $user->getUsername(); // Good return !! 


if ($app['security.authorization_checker']->isGranted('ROLE_USER')) 
    echo 'Never return also my user is ROLE_USER'; 
else 
    echo 'always return'; 

PS: Meine Benutzer ist durch Symfony erzeugen

Meine Firewall Silex:

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
    'main' => array(
     'pattern' => '^/', 
     'guard'  => array(
      'authenticators' => array(
       'api.token_authenticator' 
      ), 
     ), 
     'users'  => function() use ($app) { 
      return new UserProvider($app['db']); 
     }, 

     'anonymous' => true, 
    ), 
), 
'security.role_hierarchy' => array(
    'ROLE_USER'    => array(), 
    'ROLE_ADMIN'   => array('ROLE_USER'), 
    'ROLE_SUPER_ADMIN'  => array('ROLE_USER','ROLE_ADMIN','ROLE_ALLOWED_TO_SWITCH'), 
), 
)); 

var_dump ($ user) Rückkehr:

object(Symfony\Component\Security\Core\User\User)#255 (7) { 
    ["username":"Symfony\Component\Security\Core\User\User":private]=> 
    string(23) "[email protected]" 
    ["password":"Symfony\Component\Security\Core\User\User":private]=> 
    string(60) "$2y$13$8sv57a29wd9Xg0gc0o0ckOP3.pN9g2ZOuAwaldRdrPOk.XA9Dp8m" 
    ["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(34) "a:1:{i:0;s:16:"ROLE_SUPER_ADMIN";}" 
    } 
} 

Dankten

+0

Können Sie Ihre Firewall-Konfiguration und Ihre Zugriffsregeln teilen? – mTorres

+0

Hallo! Ich bearbeite gerade meinen ersten Post – Corgato

+0

Können Sie versuchen, einige [Zugriffsregeln] hinzuzufügen (http://silex.sensiolabs.org/doc/providers/security.html#defining-access-rules)? – mTorres

Antwort

0

Have Sie haben beide versucht Ionen? Welche Silex Version verwendest du?

// Symfony 2.6+ 
if ($app['security.authorization_checker']->isGranted('ROLE_ADMIN')) { 
    // ... 
} 

// Symfony 2.3/2.5 
if ($app['security']->isGranted('ROLE_ADMIN')) { 
    // ... 
} 
+0

Hallo, Ich benutze die neueste Version von Silex entweder Version 2.0 Ich habe beide die richtige Methode verwendet, um die Rolle zu testen ... – Corgato

0

Ich habe es nicht geschafft, dieses Problem zu lösen ... Ich weiß nicht, ob dies hilfreich ist, aber das ist mein Komponist Datei:

{ 
"name": "Acme/api", 
"license": "proprietary", 
"type": "project", 
"description" : "API Project", 
"require": { 
    "silex/silex": "~2.0", 
    "doctrine/dbal": "2.5.*", 
    "symfony/security": "^3.1", 
    "symfony/twig-bridge": "^3.1", 
    "symfony/translation": "3.1.*", 
    "symfony/config": "3.1.*", 
    "symfony/browser-kit": "3.1.*", 
    "symfony/css-selector": "3.1.*", 
    "symfony/monolog-bridge": "3.1.*", 
    "phpunit/phpunit": "5.5.*" 
}, 
"autoload": { 
    "psr-4": {"Api\\": "src"} 
} 
} 

EDIT:

gefunden aber ich weiß nicht, wie ich das Problem lösen soll, Symfony zeichnet Actual über Serialize, Flint oder direkt in der richtigen Rolle verwendete Zeichenfolge direkt in der Datenbank auf.

Die isGranted-Methode unterstützt die De-Serialisierungsrollen nicht.

Warum Symfony und Silex verwendet er nicht die gleichen Verwaltungsrollen?

Wie berücksichtigt man die Serialisierung?