PostDownload.php 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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 PostDownload
  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. if(!$post->exists) {
  33. return alert('존재하지 않는 게시글입니다.');
  34. }
  35. $user = $request->user();
  36. // 비회원 게시글은 비밀번호 확인
  37. if(!$user && !$post->user_id) {
  38. $passwd = $request->input('passwd');
  39. if(!$passwd || $passwd != $post->password) {
  40. return alert('권한이 없습니다.');
  41. }
  42. }
  43. $boardMeta = $boardService->meta($board->id);
  44. $postViewURL = route('board.post.view', [$code, $postID]);
  45. // 다운로드 권한 확인
  46. $response = Gate::inspect('download', [$post, $boardMeta]);
  47. if($response->denied()) {
  48. if($response->code() == 401) {
  49. return loginCheck($postViewURL);
  50. }else{
  51. return alert($response->message());
  52. }
  53. }
  54. $request->merge([
  55. 'board' => $board,
  56. 'boardMeta' => $boardMeta,
  57. 'post' => $post
  58. ]);
  59. return $next($request);
  60. }
  61. }