Symfony 2.8 Twig扩展基于当前登录用户

时间:2017-10-14 15:39:15

标签: symfony doctrine twig

我想要做的是只显示他有权访问的内容。

我首先在 security.yml &中做 access_control 。重定向,但我必须做至少30个不同的帐户; /

接下来,我创建将连接到数据库的twig扩展并获取当前记录的用户特定设置 - 访问面板。这是好方法吗?

问题是

$user = $this->getUser()->getId();
$currentUser = $this->em->getRepository('AppBundle:User')->find($user);

它不起作用,空白页面出现在dev env

但是当我把1

$currentUser = $this->em->getRepository('AppBundle:User')->find(1);

&安培; 1是用户ID一切正常。

services.yml

    app.twig.users_extension:
    class: AppBundle\Twig\Extension\AccesExtension
    arguments: ["@doctrine.orm.entity_manager","@security.token_storage"]
    tags:
        - { name: twig.extension }

Twig Extension

class AccesExtension extends \Twig_Extension
{

protected $em;
protected $tokenStorage;


public function __construct(EntityManager $em, TokenStorage $tokenStorage)
{
    $this->em = $em;
    $this->tokenStorage = $tokenStorage;
}

public function getUser()
{
    return $this->tokenStorage->getToken()->getUser();
}

public function getGlobals()
{
    $user = $this->getUser()->getId();
    $currentUser = $this->em->getRepository('AppBundle:User')->find($user);
    return array (
        "acces" => $currentUser,
    );
}

public function getName()
{
    return "AppBundle:AccesExtension ";
}

}

1 个答案:

答案 0 :(得分:0)

正如评论中的人已经告诉您的那样,您可以使用security voters

这是一个带有视频/文字的simple tutorial,它解释了选民的使用以及如何在树枝中使用它们,这可以帮助您解决问题。