PostAccess.php~ 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace App\Http\Middleware\Board;
  3. use Closure;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Gate;
  6. use App\Services\BoardService;
  7. use App\Services\PostService;
  8. class PostAccess
  9. {
  10. public function handle(Request $request, Closure $next)
  11. {
  12. $code = $request->route('code');
  13. $postID = $request->route('postID');
  14. // 게시판 코드 확인
  15. if (!$code || !$postID) {
  16. abort(404);
  17. }
  18. $boardService = new BoardService();
  19. // 게시판 정보 조회
  20. $board = $boardService->find($code);
  21. // 게시판 존재 유무
  22. if (!$board->exists) {
  23. return alert('존재하지 않는 게시판입니다.', DIRECTORY_SEPARATOR);
  24. }
  25. // 게시판 사용 여부
  26. if ($board->is_display == 0) {
  27. return alert('더 이상 사용하지 않는 게시판입니다.', DIRECTORY_SEPARATOR);
  28. }
  29. $postService = new PostService();
  30. // 게시글 조회
  31. $post = $postService->find($postID);
  32. $boardIndexURL = route('board.list', $code);
  33. // 게시글 존재 유무
  34. if (!$post->exists) {
  35. return alert('존재하지 않는 게시글입니다.', $boardIndexURL);
  36. }
  37. // 게시판 정보 조회
  38. $boardMeta = $boardService->meta($board->id);
  39. // 보기 권한 확인
  40. $response = Gate::inspect('view', [$post, $boardMeta]);
  41. echo '<pre>';var_dump($response->denied());echo '</pre>';exit;
  42. if($response->denied()) {
  43. if($response->code() == 401) {
  44. return loginCheck($boardIndexURL);
  45. }else{
  46. return alert($response->message(), $boardIndexURL);
  47. }
  48. }
  49. // 신고 시 숨김
  50. if (
  51. $boardMeta->item('use_blame', 0)
  52. && $post->blame >= $boardMeta->item('blame_blind_count', 0)
  53. ) {
  54. return alert('신고 누적으로 비공개 처리되었습니다. 해당 게시글은 관리자 확인 후 이용규칙에 따라 처리됩니다.', $boardIndexURL);
  55. }
  56. // 게시글 조회 수 증가
  57. $postService->addHit($post);
  58. $request->merge([
  59. 'board' => $board,
  60. 'boardMeta' => $boardMeta,
  61. 'post' => $post
  62. ]);
  63. return $next($request);
  64. }
  65. }