gpt4 book ai didi

Symfony:在事件监听器中检查用户授权

转载 作者:行者123 更新时间:2023-12-02 17:19:38 25 4
gpt4 key购买 nike

我是 Symfony 的新手(目前使用 Symfony 3.2),我正在学习如何创建事件监听器以在每个 Controller 之前运行我的随机函数。我的目标是通过 isGranted() 函数检查用户是否已登录。看看我的代码

服务.yml

> parameters:
> # parameter_name: value
>
> services:
> app.form_login_authenticator:
> class: AppBundle\Security\FormLoginAuthenticator
> arguments: ["@router", "@security.password_encoder"]
> app.init.action_listener:
> class: AppBundle\EventListener\InitListener
> tags:
> - { name: kernel.event_listener, event: kernel.controller, method: onKernelController }

初始化监听器

> <?php namespace AppBundle\EventListener;
>
> use AppBundle\Controller\InitController; use
> Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; use
> Symfony\Component\HttpKernel\Event\FilterControllerEvent; use
> Symfony\Component\HttpFoundation\Session\Session;
>
> class InitListener {
>
> public function onKernelController(FilterControllerEvent $event)
> {
> $controller = $event->getController();
>
>
>
> //if ($this->get('security.authorization_checker')->isGranted('IS_AUTHENTICATED_FULLY'))
> //{
> // do somehting
> //}else{
> // do somehting
> //}
> if ($controller[0] instanceof InitController) {
>
> }
> if (!is_array($controller)) {
> return;
> }
>
>
> }
> }

我应该怎么做才能在我的 InitListener 中使用 isGranted() 函数?

最佳答案

显然,您应该将 security.authorization_checker 传递给您的监听器。

首先在配置中

 app.init.action_listener:
class: AppBundle\EventListener\InitListener
arguments: ["@security.authorization_checker"]
tags:
- { name: kernel.event_listener, event: kernel.controller, method: onKernelController }

然后在代码中

 <?php namespace AppBundle\EventListener;

use AppBundle\Controller\InitController;
use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
use Symfony\Component\HttpKernel\Event\FilterControllerEvent;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\Security\Core\Authorization\AuthorizationCheckerInterface

class InitListener {

protected $authorizationChecker;

public function __construct(AuthorizationCheckerInterface $authorizationChecker)
{
$this->authorizationChecker = $authorizationChecker;
}

public function onKernelController(FilterControllerEvent $event)
{
$controller = $event->getController();

if ($this->authorizationChecker->isGranted('IS_AUTHENTICATED_FULLY')) {
// DO YOUR STUFF
}

if ($controller[0] instanceof InitController) {

}
if (!is_array($controller)) {
return;
}


}
}

关于Symfony:在事件监听器中检查用户授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43947102/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com