2013-03-18 133 views
0

使用symfony2.1和FOSFacebookBundle:身份验证访问控制ROLES

如果用户正在输入www.example.com,用户关闭了他的浏览器,然后如果他仍然通过身份验证,我想要重定向到www.example.com/secured。

如果用户通过身份验证,我无法进入indexAction。

我Security.yml:

security: 
encoders: 
    Symfony\Component\Security\Core\User\User: plaintext 

role_hierarchy: 
    ROLE_ADMIN:  ROLE_USER 
    ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH] 

providers: 
    in_memory: 
     memory: 
      users: 
       user: { password: userpass, roles: [ 'ROLE_USER' ] } 
       admin: { password: adminpass, roles: [ 'ROLE_ADMIN' ] } 
    my_fos_facebook_provider: 
      id: my.facebook.user 
       //How can I add here a ROLE_USER? 

firewalls: 

    //standard thing from FosFacebookBundle 

access_control: 
    - { path: ^/, roles: [IS_AUTHENTICATED_ANONYMOUSLY] } 

我的indexAction:

if($this->container->get('security.context') 
    ->isGranted('IS_AUTHENTICATED_FULLY')){ 
    echo 'asdf'; //this is working in the secured area www.example.com/secured/ 
} 

我的错误信息:安全上下文不包含身份验证令牌。一个可能的原因可能是没有为此URL配置防火墙。

在安全区域,用户没有角色。我该如何改变它?

出了什么问题?

UPDATE

namespace Frontend\FbAccountBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* User 
* 
* @ORM\Table(name="user") 
* @ORM\Entity 
*/ 
class User 
{ 
/** 
* @var integer 
* 
* @ORM\Column(name="id", type="bigint", nullable=false) 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="IDENTITY") 
*/ 
private $id; 

/** 
* @var integer 
* 
* @ORM\Column(name="facebook_id", type="bigint", nullable=false) 
*/ 
private $facebookId; 
/** 
* @param Array 
*/ 
public function setFBData($fbdata) 
{ 
    if (isset($fbdata['id'])) { 
     $this->setFacebookId($fbdata['id']); 
     $this->addRole('ROLE_FACEBOOK'); 
    } 
} 

security.yml:

services: 
my.facebook.user: 
    class: Frontend\FbAccountBundle\Security\User\Provider\FacebookProvider 
    arguments: 
     facebook: "@fos_facebook.api" 
     userManager: "@fos_user.user_manager" 
     validator: "@validator" 
     container: "@service_container" 

回答

0

你需要写一个用户提供给角色添加到您的用户。这包括在FOSFacebookBundle文档中。查看页面底部附近的用户实体上的服务定义和setFBData方法。这应该给你一个坚实的开始。

Integration with FOSUserBundle

+0

这是我做的,但由于我的实体我无法扩展它。我更新了我的代码。 – craphunter 2013-03-18 17:52:52