Sonata Admin Bundle 删除 routeCollection 角色

Posted

技术标签:

【中文标题】Sonata Admin Bundle 删除 routeCollection 角色【英文标题】:Sonata Admin Bundle remove routeCollection roles 【发布时间】:2013-04-24 03:34:22 【问题描述】:

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

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

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

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

【问题讨论】:

看看sonata-project.org/bundles/admin/master/doc/reference/…,实际上有一个内置的方法可以做到这一点。 我看到了这个页面,但不清楚如何将每个权限附加到每个实体的每个用户/角色。因为文档只显示了如何声明不同的权限,而不是如何声明每个实体的每个角色的权限。 【参考方案1】:

我只是以不同的方式做,只是在 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;
    

【讨论】:

以上是关于Sonata Admin Bundle 删除 routeCollection 角色的主要内容,如果未能解决你的问题,请参考以下文章

Sonata Admin Bundle:如何将表单中的“删除”按钮添加到嵌套实体列表中的实体?

Sonata Media Bundle 与 Sonata Admin Bundle 3.0(或 2.4)

Sonata Admin Bundle - 自定义模板

sonata-project/user-bundle dev-master 与 sonata-project/doctrine-orm-admin-bundle 冲突

Sonata admin-bundle - 没有注销导航栏

Sonata Admin Bundle ACL 不授予编辑权限