检查用户是否在Symfony中访问自己的个人资料

时间:2012-11-28 19:11:45

标签: symfony twig symfony-2.1

我有一个通过id找到用户的路由。我想在配置文件中显示不同的内容,具体取决于用户是访问他自己的个人资料还是其他用户个人资料。

Controller中的方法:

/**
 * @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
    );
}

Twig中的输出:

        {% if is_granted('ROLE_PROFILE_OWNER') %}
            <p>This is my profile</p>
        {% else %}
            <p>This is not my profile</p>
        {% endif %}

如果我执行{{dump(app.user)}},该角色会显示在用户身上,但它会输出不是我的个人资料的文本。任何人都知道为什么这不起作用?

此外,我不知道这是否是这样做的正确方法。我想遵循最佳实践,如果这是完全错误的,请赐教。

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在执行showAction()之前进行凭据检查,因此$auth->addRole('ROLE_PROFILE_OWNER');行永远不会运行。这就是为什么你总是得到“这不是你的个人资料”的消息。

此外,您不应使用用户角色来执行此类配置文件所有权检查。而只是比较登录用户的id(存储在会话中)和个人资料user_id。如果它们不同,则抛出AccessDeniedException()

查看文档Securing a controllerSession Management页。