我用FOSUserBundle创建User,当用户创建时我也创建了一个配置文件
用户和个人资料
我希望每当用户更改页面时,实际检查用户导航是否经过身份验证并且还有个人资料
目前在我的控制器中我做了
$user = $this->getUser();
if (!is_object($user)) { //i have to add || null !== $user->getProfile()
throw new AccessDeniedException('This user does not have access to this section.');
}
但我不会在所有控制器中重复此代码,我也会检查用户是否有个人资料,否则会重定向到主页
答案 0 :(得分:2)
您可以使用JMSSecurityExtraBundle为每个操作添加注释:
/**
* @Secure(roles="ROLE_USER, ROLE_FOO, ROLE_ADMIN")
*/
或不使用捆绑包:
if (false === $this->get('security.context')->isGranted('ROLE_ADMIN')) {
throw new AccessDeniedException();
}
它更简单。也许是为你的所有控制器制作它的另一个解决方案,但我不知道。
答案 1 :(得分:0)
您可以使用请求侦听器: http://symfony.com/doc/current/cookbook/service_container/event_listener.html#request-events-checking-types
只需添加您的魔法并通过活动重定向到主页