[英]Authentication access control ROLES
使用symfony2.1和FOSFacebookBundle:
如果用户正在输入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配置防火墙。
在安全区域中,用户没有角色。 我该如何更改?
怎么了?
更新
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"
您需要编写一个用户提供程序以将该角色添加到您的用户。 FOSFacebookBundle文档中对此进行了介绍。 查看页面底部附近的User实体上的服务定义和setFBData方法。 那应该给您一个坚实的开始。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.