对于每篇文章,都会显示评论列表。我希望用户能够编辑他们自己的评论(并且只有他们自己的评论)。我想知道使用方法 2 是否可以,或者是否存在安全漏洞?
方法一
到目前为止,我使用表单中的 security.context 来检查当前评论作者是否是 current_user。如果是,那么我可以在我的表单中添加一个带有 comment.text 的文本区域,以便用户可以编辑其评论。(但我的表单因此必须定义为服务,以便我可以注入 security.context)
在我的表单中(定义为服务,以便我可以注入 security.context)
$current_user = $this->Securitycontext->getToken()->getUser();
// I add the textarea to allow edit of the comment only if the user is the author of the comment.
if($current_user == $comment->getAuthor())
{
$form->add('comment.text', 'textarea');
}
方法_2
我尝试了一些不同的东西,它似乎工作正常(此外,我不必将我的表单定义为服务,因为我没有在我的表单中使用 security.context。)
我为我的实体评论创建了一个 EditAutorisation 属性。从控制器,我检查 current_user 是否是评论的作者。如果是,我将 EditAutorisation 设置为 true。
if($this->getUser() = $comment->getAuthor()){
$comment->setEditAutorisation('true');
}
然后在我的表单中,我只需检索 EditAutorisation 的值
if($comment->getEditAutorisation() )
{
$form->add('comment.text', 'textarea');
}
PS:在这两种情况下,我都在表单中使用 EventListener PRE_SET_DATA 来访问对象 $comment
我不太喜欢methode2,因为我不必将它定义为服务。但是因为我可以在控制器中进行测试,并在 PHP 中的 FORM 中轻松使用测试结果(使用 eventListener 获取 $comment->getEditAutorisation())和 TWIG(使用 {{ comment.EditAutorisation }})