1
データベースにROLE_ADMIN
というすべてのクエストを記録したいsymfonyアプリケーションがあります。新しいバンドルを追加しようとしましたが、AppKernel.php
のロード方法がわかりません。あなたが提供できるガイダンスは非常に役立ちます。Log Every Request Symfony
データベースにROLE_ADMIN
というすべてのクエストを記録したいsymfonyアプリケーションがあります。新しいバンドルを追加しようとしましたが、AppKernel.php
のロード方法がわかりません。あなたが提供できるガイダンスは非常に役立ちます。Log Every Request Symfony
kernel.request
イベントにイベントリスナーを作成し、ROLE_ADMIN
というユーザーからのリクエストがあるかどうかを確認します。
まずサービスを作成し、security.authorization_checker
とdoctrine.orm.entity_manager
を注入:
admin_log_listener:
class: AppBundle\EventListener\AdminLogListener
arguments: [ "@security.authorization_checker", "@doctrine.orm.entity_manager" ]
tags:
- { name: kernel.event_listener, event: kernel.request }
そして、イベントリスナーの作成:
namespace AppBundle\EventListener;
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
use Symfony\Component\Security\Core\Authorization\AuthorizationChecker;
use Doctrine\ORM\EntityManager;
class AdminLogListener {
protected $authChecker;
protected $entityManager;
public function __construct(AuthorizationChecker $authChecker, EntityManager $entityManager)
{
$this->authChecker = $authChecker;
$this->entityManager = $entityManager;
}
public function onKernelRequest(GetResponseEvent $event)
{
if ($this->authChecker->isGranted('ROLE_ADMIN')) {
// Use $this->entityManager to send query or call a repository function
// Refer to http://www.doctrine-project.org/api/orm/2.5/class-Doctrine.ORM.EntityManager.html
}
}
}
を