CommentOwner.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. <?php
  2. namespace App\Http\Middleware\Board;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Auth;
  6. use App\Services\BoardService;
  7. use App\Services\PostService;
  8. use App\Services\CommentService;
  9. class CommentOwner
  10. {
  11. public function handle(Request $request, Closure $next)
  12. {
  13. $boardService = new BoardService();
  14. $postService = new PostService();
  15. $commentService = new CommentService();
  16. $code = $request->route('code');
  17. $postID = $request->route('postID');
  18. $commentID = $request->post('cid');
  19. $method = $request->method();
  20. // 게시판 코드 확인
  21. if (!$code || !$postID || !$commentID) {
  22. abort(404);
  23. }
  24. // 게시판 조회
  25. $board = $boardService->info($code);
  26. // 게시판 존재 유무
  27. if (!$board || !$board->exists) {
  28. return response()->json(['success' => false, 'message' => '존재하지 않는 게시판입니다.']);
  29. }
  30. // 게시판 사용 여부
  31. if ($board->is_display == 0) {
  32. return response()->json(['success' => false, 'message' => '더 이상 사용하지 않는 게시판입니다.']);
  33. }
  34. // 권한 유무
  35. if ($method != 'DELETE') {
  36. $permission = $boardService->permission($code, BOARD_PERMIT_TYPE_5);
  37. if (!$permission->success) {
  38. return response()->json(['success' => false, 'message' => $permission->message]);
  39. }
  40. }
  41. // 게시글 존재 유무
  42. if (!$postService->isExists($code, $postID)) {
  43. return response()->json(['success' => false, 'message' => '존재하지 않는 게시글입니다.']);
  44. }
  45. $userID = Auth::id();
  46. $action = ($method == 'DELETE' ? '삭제' : '수정');
  47. // 내가 작성한 댓글인지 확인
  48. if (!$commentService->isMyComment($postID, $commentID, $userID)) {
  49. return response()->json(['success' => false, 'message' => $action . ' 권한이 없습니다.']);
  50. }
  51. $boardMeta = $boardService->meta($code);
  52. $comment = $commentService->info($postID, $commentID);
  53. // 댓글 수정/삭제 금지 기간 확인
  54. if ($boardMeta->protect_comment_day > 0) {
  55. if ((time() - strtotime($comment->created_at)) >= ($boardMeta->protect_comment_day * 86400)) {
  56. return response()->json(['success' => false, 'message' => '이 게시판은 ' . $boardMeta->protect_comment_day . '일 이상된 게시글은 ' . $action . ' 불가합니다.']);
  57. }
  58. }
  59. return $next($request);
  60. }
  61. }