【问题标题】:Testing role silex测试角色silex
【发布时间】:2016-09-29 15:53:08
【问题描述】:

我对燧石有问题,我不明白为什么他从不将 TRUE 我返回到测试角色。 我当前的用户是一个显示 $ username isGranted 但只返回 FALSE 的节目。

你有什么想法吗?

$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($user) 返回:

    object(Symfony\Component\Security\Core\User\User)#255 (7) {
  ["username":"Symfony\Component\Security\Core\User\User":private]=>
  string(23) "test@test.com"
  ["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";}"
  }
}

谢谢

【问题讨论】:

  • 您能分享一下您的防火墙配置和访问规则吗?
  • 嗨!我刚刚编辑了我的第一篇文章
  • 你可以尝试添加一些access rules吗?
  • 通过添加我仍然卡住的规则,它返回我没有访问权限。

标签: php silex


【解决方案1】:

您是否尝试过这两种选择?您使用的是什么 Silex 版本?

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

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

【讨论】:

  • 你好,我用的是最新版的Silex或者2.0版本我都用了正确的方法来测试角色...
【解决方案2】:

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

{
"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 不使用相同的管理角色?

如何考虑序列化?

【讨论】:

    猜你喜欢
    • 2013-07-08
    • 2018-06-21
    • 1970-01-01
    • 1970-01-01
    • 2012-04-18
    • 2015-06-30
    • 2011-06-03
    • 2021-01-11
    • 2017-03-08
    相关资源
    最近更新 更多