2016-09-29 75 views
0

我有一个燧石问题,我不明白他为什么从来没有返回TRUE我的测试角色。 我目前的用户是一个显示$用户名isGranted但返回我只FALSE。测试角色silex

你有什么想法吗?

$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:我的用户是通过Symfony的产生

我的防火墙的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($用户)的回报:

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";}" 
    } 
} 

感谢的

+0

您可以分享您的防火墙配置和访问规则吗? – mTorres

+0

嗨!我只是编辑我的第一篇文章 – Corgato

+0

你可以尝试添加一些[访问规则](http://silex.sensiolabs.org/doc/providers/security.html#defining-access-rules)吗? – mTorres

回答

0

有无你试过两种选择离子?您使用的是哪种Silex版本?

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

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

你好, 我使用最新版本的Silex 2.0版本 我用正确的方法来测试角色... – Corgato

0

我还没有设法解决这个问题......我 不知道这是有帮助的,但是这是我的作曲文件:

{ 
"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"} 
} 
} 

编辑:

我发现但我不知道如何解决这个问题,Symfony通过serialize,Flint记录Actual,或者直接在数据库中直接使用正确的角色字符串。

isGranted方法不支持反序列化角色。

为什么Symfony和Silex不使用相同的管理角色?

如何考虑序列化?