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