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');
    }
}

但是以管理员身份登录我收到错误:在第 31 行的 SonataAdminBundle:Block:block_admin_list.html.twig 中的模板渲染期间引发了异常(“Route“admin_sademer_core_MIENTITY_create”不存在。”)。

就像在某个时刻奏鸣曲删除了我在进入仪表板之前创建的路线,然后当我进入仪表板时,我尝试在路线创建中输入,但路线已经被删除。但我不确定发生了什么。

任何想法?非常感谢!

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 回答