控制器构造函数中的 Symfony denyAccessUnlessGranted

Symfony denyAccessUnlessGranted in Controller constructor

我有一个控制器有很多动作:

class SomeController extends AbstractController
{

    public function indexAction()
    {
        $this->denyAccessUnlessGranted('ROLE_SUPERMANAGER');
        [...]
    }

    public function someAjaxAction()
    {
        $this->denyAccessUnlessGranted('ROLE_SUPERMANAGER');
        [...]
    }
    
    public function someOtherAjaxAction()
    {
        $this->denyAccessUnlessGranted('ROLE_SUPERMANAGER');
        [...]
    }
}

为什么我不能这样做,拒绝访问该控制器的所有操作?

public function __construct()
{
    $this->denyAccessUnlessGranted('ROLE_SUPERMANAGER');
}

我在 AbstractController.php:218:

上获得了 Call to a member function has() on null
if (!$this->container->has('security.authorization_checker')) {

除了 security.yaml 中的规则外,在控制器 class 中还有什么方法可以做到这一点吗?

您可以像这样在 class 级别添加 SensioFrameworkExtraBundle 的 isGranted annotation

use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;

/**
 * @IsGranted("ROLE_SUPERMANAGER")
**/
class SomeController extends AbstractController
{
   // Your actions without auth check in each
}