Symfony / DRY - 检查是否在每个操作中都授予了用户权限

时间:2013-11-19 11:22:49

标签: symfony dry

我正在使用此代码检查我的Symfony应用程序中是否授予了用户权限:

 $securityContext = $this->container->get('security.context');

 if($securityContext->isGranted('IS_AUTHENTICATED_REMEMBERED') ){
     $user = $this->get('security.context')->getToken()->getUser()->getId();
 } else {
     return $this->render('IelCategoryBundle:Category:home.html.twig');
 }

我必须在几乎所有正在编写的CRUD操作中编辑它(编辑,删除,...)。

我觉得自己根本不干嘛(不玩文字;-))。在许多行动中有更好的方法来检查这个吗?

2 个答案:

答案 0 :(得分:2)

JMSSecurityExtraBundle提供了@Secure注释,可以在调用控制器/服务方法之前轻松检查某个用户角色。

use JMS\SecurityExtraBundle\Annotation as SecurityExtra;

/** @SecurityExtra\Secure(roles="IS_AUTHENTICATED_REMEMBERED") */
public function yourAction()
{
    // ...
}

答案 1 :(得分:0)

最好的选择是依靠Kernel事件听众:http://symfony.com/doc/current/cookbook/service_container/event_listener.html

将您的侦听器实现为服务,然后如果$this->user结果isGranted,您可以将TRUE设置为所需的值。稍后,您可以使用以下方法轻松检索控制器中的值:

$myServiceListener->getUser();

另一方面,如果检查失败,您可以轻松地将用户重定向到home.html.twig