检查用户是否在Symfony中访问自己的配置文件
我有一个按id查找用户的路由。我希望根据用户是访问自己的配置文件还是其他用户配置文件,在配置文件上显示不同的内容 控制器中的方法:检查用户是否在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
/**
* @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,并仅在它们匹配的情况下显示某些内容,就可以了。