Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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中访问自己的配置文件_Symfony_Twig_Symfony 2.1 - Fatal编程技术网

检查用户是否在Symfony中访问自己的配置文件

检查用户是否在Symfony中访问自己的配置文件,symfony,twig,symfony-2.1,Symfony,Twig,Symfony 2.1,我有一个按id查找用户的路由。我希望根据用户是访问自己的配置文件还是其他用户配置文件,在配置文件上显示不同的内容 控制器中的方法: /** * @Route("/u/{id}", name="profile_show") * @ParamConverter("user", class="UserBundle:User") * @Template() */ public function showAction(User $user) { $auth = $this->getU

我有一个按id查找用户的路由。我希望根据用户是访问自己的配置文件还是其他用户配置文件,在配置文件上显示不同的内容

控制器中的方法:

/**
 * @Route("/u/{id}", name="profile_show")
 * @ParamConverter("user", class="UserBundle:User")
 * @Template()
 */
public function showAction(User $user)
{
    $auth = $this->getUser();

    if ($user->getId() == $auth->getId()) {
        $auth->addRole('ROLE_PROFILE_OWNER');
    }

    return array(
        'user' => $user
    );
}
以细枝为单位的输出:

        {% if is_granted('ROLE_PROFILE_OWNER') %}
            <p>This is my profile</p>
        {% else %}
            <p>This is not my profile</p>
        {% endif %}
{%if被授予('ROLE\u PROFILE\u OWNER')%}
这是我的个人资料

{%else%} 这不是我的个人资料

{%endif%}
如果我执行{{dump(app.user)}操作,但它输出的文本不是我的个人资料,则该角色将显示在用户身上。有人知道为什么这不起作用吗

我也不知道这样做是否正确。我想遵循最佳实践,所以如果这是完全错误的,请启发我


感谢您的帮助。

在执行
showAction()
之前会进行凭据检查,因此
$auth->addRole('ROLE\u PROFILE\u OWNER')行从不运行。这就是为什么你总是收到“这不是你的个人资料”的信息

此外,您不应该使用用户角色来执行这种配置文件所有权检查。相反,只需比较登录用户的
id
(存储在会话中)和配置文件
用户id
。如果它们不相同,则抛出一个
AccessDeniedException()


查看文档和页面。

我相信is_grated()函数会检查会话中缓存的用户角色。因此,向用户添加角色并不一定会更新会话,除非您在代码中以某种方式处理了这个问题。在模板中使用类似{%if$user.hasRole('.')%}的东西怎么样?我不想保护控制器本身。如果用户id与登录用户id不匹配,只需从视图中隐藏某些内容。无论哪种方式,我认为这都回答了我关于如何正确执行此操作的问题。只需比较twig中的会话用户id和概要文件用户id,并仅在它们匹配的情况下显示某些内容,就可以了。