Sonata Admin Bundle删除routeCollection角色

时间:2013-04-30 09:06:05

标签: symfony roles configure sonata-admin

我正在使用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');
    }
}

但是以管理员身份登录我收到错误: 在呈现模板期间抛出异常(“Route”admin_sademer_core_MIENTITY_create“不存在。”)在SonataAdminBundle:Block:block_admin_list.html.twig第31行。

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

有什么想法吗?非常感谢!

2 个答案:

答案 0 :(得分:0)

这可能是因为你的路线被缓存了,试试这个:

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

答案 1 :(得分:0)

我只是采用了不同的方式,只是在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;
    }
}