4

Sonata Admin Bundle を使用していますが、機能に問題があります。

function configureRoutes(RouteCollection $collection){ }

簡単に書くと、関数は正しく機能します。

$collection->remove('create');

しかし、私がしようとしているのは、接続されているユーザーの役割に応じていくつかのルートを削除することです。

$seguridad = $this->getConfigurationPool()->getContainer()->get('security.context');
if ($seguridad->getToken()->getUser() != "anon."){
    if ( !$seguridad->isGranted('ROLE_ADMIN')  ) {
        $collection->remove('create');
    }
}

しかし、管理者としてログに記録すると、次のエラーが表示されます: テンプレートのレンダリング中に例外がスローされました (「ルート "admin_sademer_core_MIENTITY_create" は存在しません)。SonataAdminBundle:Block:block_admin_list.html.twig 行 31 にあります。

ある瞬間、ソナタがダッシュボードに入る前にルート作成を削除し、ダッシュボードに入るときにルート作成に入ろうとしたが、ルートはすでに削除されているようです。しかし、何が起こっているのかわかりません。

何か案が?どうもありがとう!

4

1 に答える 1

2

entitAdmin.php ファイルで isGranted() をオーバーライドしただけです。次に、ユーザーの役割に応じて権限を確認できます。しかし、それは私たちの目的を果たしました。$collection->remove('create') を使用したい場合、アプリケーションの実行時にメソッド ("configureRoutes()") を呼び出す方法がないため、それを行うことはできません。キャッシュの作成中にのみそのメソッド (「configureRoutes()」) を呼び出します。

 /**
 * {@inheritdoc}
 */
public function isGranted($name, $object = null)
{
    $user = $this->getConfigurationPool()->getContainer()->get('security.context')->getToken()->getUser();

    switch ($name) {
        case "CREATE":
            if (!$user->hasRole("ROLE_ADMIN")) {
                return false;
            }
        default:
            return true;
    }
}
于 2015-06-16T05:46:52.807 に答える