0

コントローラーを定義しましたが、以下のようにすべてを保護したいと思います。

// In my Controller Class 
public function chooseDateAction()
{
    if($this->get('MY.roles_features')
            ->isGranted($this->container->get('request')->get('_route')))
    {
         // Do something 

    }
    else
    {
        throw new AccessDeniedException();
    }


    return array( );
}

動的であるため、独自の「isGranted」関数を設計する必要rolesがありました。ところで、機能は正常に動作しています!

したがって、私の質問はisGranted、すべての関数を繰り返すControllers必要があるか、コードの冗長性を減らすためにどこかに置くことができるかということです。

isGrantedセキュリティの最上位レイヤーに配置する必要があることはわかっていますが、問題は、どのように、どこに配置するかです。

4

1 に答える 1

5

メソッドが成功した場合は構築時にチェックし、isGrantedそうでない場合は例外をスローする基本コントローラーを作成してみてください。例えば:

<?php

namespace Acme\DolanBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\Security\Core\Exception\AccessDeniedException;

class BaseController extends Controller
{

    public function __construct()
    {
         if(!$this->get('MY.roles_features')
                  ->isGranted($this->container->get('request')->get('_route')))
        {
         throw new AccessDeniedException('Gooby pls');
        }
    }
}

次に、他のコントローラーで BaseController を拡張するだけです。

于 2012-06-16T10:21:20.933 に答える