2016-09-29 4 views
0

부싯돌에 문제가 있습니다. 왜 그가 테스트 ROLE에 TRUE를 반환하지 않는지 이해할 수 없습니다. 현재 사용자가 $ username 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 :

$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는 동일한 관리 역할을 사용하지 않습니까?

직렬화를 고려하는 방법은 무엇입니까?