2017-03-26 3 views
1

データベースにROLE_ADMINというすべてのクエストを記録したいsymfonyアプリケーションがあります。新しいバンドルを追加しようとしましたが、AppKernel.phpのロード方法がわかりません。あなたが提供できるガイダンスは非常に役立ちます。Log Every Request Symfony

答えて

3

kernel.requestイベントにイベントリスナーを作成し、ROLE_ADMINというユーザーからのリクエストがあるかどうかを確認します。

まずサービスを作成し、security.authorization_checkerdoctrine.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 
     } 
    } 
} 
関連する問題