gpt4 book ai didi

symfony - SonataAdminBundle 根据用户显示仪表板 block

转载 作者:行者123 更新时间:2023-12-02 22:00:23 24 4
gpt4 key购买 nike

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

例如

  • 拥有群组 super 管理员权限的用户将看到“用户管理”和“消息” block
  • 拥有群组员工的用户将只能看到“消息” block

我阅读了整个文档,尤其是 security doc,但没有找到有关如何限制仪表板 View 的信息。我已经实现了一个过滤器,如果用户的权限不够,它将不会在实体类的 ListView 中显示任何条目。

但最好根本不向他展示这些 block 。

关于如何做到这一点有什么想法吗?

最佳答案

好吧,对于遇到此问题的任何人,我通过简单地在execute() 中返回一个空响应来解决它。我的用例是我想向具有特定角色的用户显示一个 block :首先,我定义了使用 security.context 服务的服务,如下所示:

sonata.block.service.foo:
class: Acme\DemoBundle\Block\FooBlockService
arguments: [ "sonata.block.service.foo", "@templating", "@doctrine", "@security.context" ]
tags:
- { name: sonata.block }

然后我将 block 服务 __construct() 定义为:

//Acme\DemoBundle\Block\FooBlockService
public function __construct($name, EngineInterface $templating, $doctrine, $securityContext)
{
parent::__construct($name, $templating);
$this->doctrine = $doctrine;
$this->securityContext = $securityContext;
}

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

//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

这可行,但感觉像是黑客攻击。主要是因为 block 经历了它的所有阶段,并且仅在输出上它不返回任何内容,这意味着开销。更好的解决方案是基于某些自定义代码以某种方式阻止加载整个 block 。

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

关于symfony - SonataAdminBundle 根据用户显示仪表板 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17063485/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com