Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony SonataAdminBundle根据用户显示仪表板块_Symfony_Sonata Admin_Symfony 2.2 - Fatal编程技术网

Symfony SonataAdminBundle根据用户显示仪表板块

Symfony SonataAdminBundle根据用户显示仪表板块,symfony,sonata-admin,symfony-2.2,Symfony,Sonata Admin,Symfony 2.2,我将SonataAdminBundle与Symfony 2.2一起使用,希望根据用户登录的内容显示仪表板块 e、 g 具有组Superadmin的用户将看到块“UserManagement”和“Messages” 具有组工作人员的用户将只看到阻止“消息” 我阅读了整个文档,尤其是文档,但没有找到关于如何限制仪表板视图的信息。我已经实现了一个过滤器,如果用户权限不足,它将在实体类的列表视图中不显示任何条目 但最好不要给他看那些街区 有什么办法吗?好吧,对于遇到这种情况的人,我只需在execut

我将SonataAdminBundle与Symfony 2.2一起使用,希望根据用户登录的内容显示仪表板块

e、 g

  • 具有组Superadmin的用户将看到块“UserManagement”和“Messages”
  • 具有组工作人员的用户将只看到阻止“消息”
我阅读了整个文档,尤其是文档,但没有找到关于如何限制仪表板视图的信息。我已经实现了一个过滤器,如果用户权限不足,它将在实体类的列表视图中不显示任何条目

但最好不要给他看那些街区


有什么办法吗?

好吧,对于遇到这种情况的人,我只需在execute()中返回一个空响应就可以解决这个问题。在我的用例中,我希望向具有特定角色的用户显示一个块: 首先,我定义了使用security.context服务的服务,如下所示:

sonata.block.service.foo:
    class: Acme\DemoBundle\Block\FooBlockService
    arguments: [ "sonata.block.service.foo", "@templating", "@doctrine", "@security.context" ]
    tags:
      - { name: sonata.block }
然后我将块服务_construct()定义为:

最后,在execute函数中,我做的第一件事是检查用户的特定角色,如下所示:

//Acme\DemoBundle\Block\FooBlockService
public function execute(BlockContextInterface $blockContext, Response $response = null)
{

    if( $this->securityContext->isGranted("ROLE_ACME_FOO") === false )
    {
        return new Response();
    }

    //... more code
这是可行的,但感觉像是一个黑客。主要是因为块经历了它的所有阶段,并且只在输出时返回零,这意味着开销。更好的解决方案是基于一些自定义代码,以某种方式防止加载整个块


总之,这不是最好的方法,但它对我有效

好吧,对于任何遇到这种情况的人,我只需在execute()中返回一个空响应就可以解决这个问题。在我的用例中,我希望向具有特定角色的用户显示一个块: 首先,我定义了使用security.context服务的服务,如下所示:

sonata.block.service.foo:
    class: Acme\DemoBundle\Block\FooBlockService
    arguments: [ "sonata.block.service.foo", "@templating", "@doctrine", "@security.context" ]
    tags:
      - { name: sonata.block }
然后我将块服务_construct()定义为:

最后,在execute函数中,我做的第一件事是检查用户的特定角色,如下所示:

//Acme\DemoBundle\Block\FooBlockService
public function execute(BlockContextInterface $blockContext, Response $response = null)
{

    if( $this->securityContext->isGranted("ROLE_ACME_FOO") === false )
    {
        return new Response();
    }

    //... more code
这是可行的,但感觉像是一个黑客。主要是因为块经历了它的所有阶段,并且只在输出时返回零,这意味着开销。更好的解决方案是基于一些自定义代码,以某种方式防止加载整个块


总之,这不是最好的方法,但它对我有效

您可以使用角色限制对块的访问,如下所示:

sonata_admin:
dashboard:
    blocks:
        - { position: top, type: your_service_block_name, class: 'col-xs-4', roles: [ROLE_SOME_NAME_HERE_, ROLE_SOME_NAME_HERE_2] }
您可以在
SonataAdminBundle:Core:dashboard.html.twig
下查看此
角色的工作原理:

{% if block.roles|length == 0 or is_granted(block.roles) %}
<div class="{{ block.class }}">
    {{ sonata_block_render({ 'type': block.type, 'settings': block.settings}) }}
</div>{% endif %}
{%if block.roles | length==0或被授予(block.roles)%}
{{sonata_block_render({'type':block.type,'settings':block.settings}}}
{%endif%}

您可以使用角色限制对块的访问,如下所示:

sonata_admin:
dashboard:
    blocks:
        - { position: top, type: your_service_block_name, class: 'col-xs-4', roles: [ROLE_SOME_NAME_HERE_, ROLE_SOME_NAME_HERE_2] }
您可以在
SonataAdminBundle:Core:dashboard.html.twig
下查看此
角色的工作原理:

{% if block.roles|length == 0 or is_granted(block.roles) %}
<div class="{{ block.class }}">
    {{ sonata_block_render({ 'type': block.type, 'settings': block.settings}) }}
</div>{% endif %}
{%if block.roles | length==0或被授予(block.roles)%}
{{sonata_block_render({'type':block.type,'settings':block.settings}}}
{%endif%}

您已经有一个过滤器阻止列表视图,但您根本不想显示它?请澄清:)是的,我有。现在,我根本不想在仪表板视图中显示该块。此时,它会在仪表板中显示块,当我转到列表视图时,我的筛选器会对某些用户隐藏列表中的条目。您已经有一个筛选器阻止列表视图,但您根本不想显示它?请澄清:)是的,我有。现在,我根本不想在仪表板视图中显示该块。此时,它在仪表板中显示该块,当我转到列表视图时,我的过滤器会对某些用户隐藏列表中的条目。非常感谢!!我会的。如果它解决了我仍在努力解决的问题,请尝试接受它。不客气。这最终解决了你的问题吗?我自己还在考虑其他的方法,因为这不是最干净的。在阅读你的答案之前,我有同样的问题,用同样的方法解决了,但这很糟糕。在我的面板中,由于我添加到块中的列类,它一直显示一个黑色空格,例如
{position:top,type:my_block\u name\u service,class:col-xs-8}
。这
col-xs-8
弄得一团糟。非常感谢!!我会的。如果它解决了我仍在努力解决的问题,请尝试接受它。不客气。这最终解决了你的问题吗?我自己还在考虑其他的方法,因为这不是最干净的。在阅读你的答案之前,我有同样的问题,用同样的方法解决了,但这很糟糕。在我的面板中,由于我添加到块中的列类,它一直显示一个黑色空格,例如
{position:top,type:my_block\u name\u service,class:col-xs-8}
。这个
col-xs-8
弄得一团糟。