3

少し質問があります。ユーザーが自分の Web サイトのどこにいても、「ROLE_DEGRADE」という役割を持っている場合、特定のページにリダイレクトされるようにしたいと考えています。

どうすればそれを行うことができますか、ファイアウォールを使用する必要がありますか? ユーザーをフォームログインにリダイレクトするのではなく、単純なページにリダイレクトしたくありません。私は自分のウェブサイトのどこにでも、「if role degrade...」を入れずに、すべてのコントローラにそれを望んでいます...

ご協力いただきありがとうございます ;)

4

1 に答える 1

5

このような何かがそれを行う必要があります...

新しいリスナーを作成します:

class AccessListener
{
    private$security;
    private $router;

    public function __construct($security, $router)
    {
        $this->security = $security;
        $this->router = $router;
    }

    public function onKernelRequest(GetResponseEvent $event)
    {
        if ($this->security->isGranted('ROLE_DEGRADE')) {
           $url = $this->router->generate('<route name>');
           $event->setResponse(new RedirectResponse($url));
        }
    }
}

それをあなたに追加してくださいservices.yml

services:
  access_listener:
    class: Acme\DemoBundle\Listener\AccessListener
    arguments: [ @security.context, @router ]
    tags:
      - { name: kernel.event_listener, event: kernel.request, method: onKernelRequest }

ドキュメント:

于 2013-06-07T08:37:21.833 に答える