2012-11-06 101 views
0

我可以在InteractiveLoginEvent的symfony2中随时添加Rol吗?或者我可以在roles:的access_control定义中加入security.yml,像这样的字符串ROLE_INTRANET_*在Symfony2中添加Rol

+0

如果您解决了您的问题,请将您的评论重写为答案并接受。 – qsheets

+0

我解决了我的问题,我只是像这样修改函数getRoles ...'''''''''' $ rol-> setRol( “ROLE_INTRANET”); $这 - > addRole($ ROL);返回$ this-> getUserRoles() - > toArray(); }' –

回答

1

嗯......你可以添加角色到用户对InteractiveLoginEvent:

... 
public function onSecurityInteractiveLogin(InteractiveLoginEvent $event) 
{ 
    $user = $event->getAuthenticationToken()->getUser(); 
    $user->addRole('ROLE_INTRANET'); 
    $event->getAuthenticationToken()->setUser($user); 
    ... 
} 
... 

方法addRole应在用户类中实现。

一个问题:你为什么要添加一个角色?出于什么目的?

+0

[answer]因为这些ROLES是静态的,它们不在数据库中。例如,如果用户通过EXTRANET访问成功登录,则应用程序会加载用户拥有的所有角色,以及一个名为ROLE_EXTRANET的额外ROLE。最后一个ROLE位于access_control(路径:^/extranet /.*,role:ROLE_EXTRANET,requires_channel:https)部分中的文件“security.yml”中,该文件允许在具有前缀^/extranet /的应用程序中导航。 * –

相关问题