Я создал блог с системой комментариев и хочу, чтобы автор или администратор удалил свой комментарий.
Итак, я поискал в Интернете, но нашел только посты со ссылкой на Symfony 2/3, и мне было трудно понять.
Поэтому я создал свою собственную функцию
/**
* @Route("/blog/commentDelete/{id}-{articleId}-{articleSlug}", name="comment_delete")
*/
public function commentDelete($id, $articleId, $articleSlug, CommentRepository $commentRepository, AuthorizationCheckerInterface $authChecker){
$em = $this->getDoctrine()->getManager();
$comment = $commentRepository->find($id);
$user = $this->getUser();
if ($user->getId() != $comment->getAuthor()->getId() && $authChecker->isGranted('ROLE_MODERATOR') == false ){
throw exception_for("Cette page n'existe pas");
}
$em->remove($comment);
$em->flush();
$this->addFlash('comment_success', 'Commentaire supprimé avec succès');
return $this->redirectToRoute('blog_show', array('id' => $articleId, 'slug' => $articleSlug));
}
На ветке у меня есть эта ссылка:
<a href="{{ path('comment_delete', {'id': comment.id, 'articleId': article.id, 'articleSlug': article.slug}) }}">Supprimer</a>
Мне нужен идентификатор комментария для действия, а также идентификатор статьи и ярлык статьи, чтобы перенаправить пользователя после удаления комментария.
Я проверяю, что человек, который удаляет комментарий, является автором или модератором.
Однако я слышал, что это абсолютно небезопасно, потому что я должен использовать форму, но я действительно не знаю, как использовать форму в этом случае... Или, может быть, с помощью JS, чтобы скрыть ссылку на конечного пользователя?
Поэтому я хотел бы знать, достаточно ли безопасна моя функция или существует лучшее решение и как его реализовать?
confirm
для кнопки удаления? (я имею в виду, сделать его кнопкой и поместить обработчик событий в событие click, чтобы запустить функциюconfirm
и удалить, только если он возвращаетtrue
). Вот сайт, который объясняет немного лучше - person Nenri   schedule 10.03.2019POST
) вместо ссылки не является более безопасным. Скрытие ссылки ничего не защитит. Это называется безопасность через неизвестность и не должна использоваться. - person ferdynator   schedule 10.03.2019