3

ユーザーのアクセス許可レベルにアクセスする必要があるイベント リスナーを作成しようとしています。コントローラーでは、次のコードを使用します

コード:

$securityContext = $this->container->get('security.context');

if($securityContext->isGranted('ROLE_USER')){
    //Do Something
}

しかし、コントローラの外では、セキュリティ コンテキストを取得する方法がわかりません。出来ますか?

4

3 に答える 3

20

これを行う最善の方法は、(phpisuber が言ったように) Service Containerを介した依存性注入を使用することです。ただし、コンテナー全体を注入する代わりに (クラス全体のテストが難しくなり、疎結合が壊れるため、悪い習慣と見なされます)、次のようにサービスを注入する必要があります。security.context

acme_foo.bar_service:
    class: %acme_foo.bar_service.class%
    arguments:
        - @security.context

サービスは次のようになります。

<?php
namespace Acme\FooBundle\Service;

use Symfony\Component\Security\Core\SecurityContext;

class BarService
{
    /**
     * @var SecurityContext
     */
    protected $context;

    /**
     * @param SecurityContext $context
     */
    public function __construct($context)
    {
        $this->context = $context;
    }

    public function doSomething()
    {
        return $this->context->isGranted('ROLE_USER');
    }
}
于 2013-04-10T09:52:28.590 に答える
5

コントローラーの外部に取得するには、次の 2 つの方法があります。

依存性注入:

これが正しい方法です。必要なのは、こちらのドキュメントだけです。

mybundle.model.mymodel:
class: %mybundle.model.myclass%
arguments: [@servicecontainer]

クイック&ダーティ:

global $kernel;
$securityContext = $kernel->getContainer()->get('security.context');
于 2013-04-09T16:49:36.940 に答える