我已经定义了我的控制器,但我想保护所有这些,如下所示:
// In my Controller Class
public function chooseDateAction()
{
if($this->get('MY.roles_features')
->isGranted($this->container->get('request')->get('_route')))
{
// Do something
}
else
{
throw new AccessDeniedException();
}
return array( );
}
我必须设计自己的'isGranted'函数,因为roles
是动态的。 BTW功能正常!
所以我的问题是我是否必须在我的所有isGranted
中重复Controllers
函数,或者我可以将它放在某处以减少代码冗余。
我知道我必须将isGranted
放在我安全的顶级层中,但问题是如何以及在何处?
答案 0 :(得分:5)
尝试编写一个基本控制器,如果isGranted
方法通过,将检查构造,否则抛出异常。 e.g:
<?php
namespace Acme\DolanBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;
class BaseController extends Controller
{
public function __construct()
{
if(!$this->get('MY.roles_features')
->isGranted($this->container->get('request')->get('_route')))
{
throw new AccessDeniedException('Gooby pls');
}
}
}
然后只需在其他控制器中扩展BaseController。