BoardAccess.php 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  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. class BoardAccess
  8. {
  9. public function handle(Request $request, Closure $next)
  10. {
  11. $code = $request->route('code');
  12. // 게시판 코드 확인
  13. if (!$code) {
  14. abort(404);
  15. }
  16. $boardService = new BoardService();
  17. // 게시판 정보 조회
  18. $board = $boardService->find($code);
  19. // 게시판 존재 유무
  20. if (!$board->exists) {
  21. return alert('존재하지 않는 게시판입니다.', DIRECTORY_SEPARATOR);
  22. }
  23. // 게시판 사용 여부
  24. if ($board->is_display == 0) {
  25. return alert('더 이상 사용하지 않는 게시판입니다.', DIRECTORY_SEPARATOR);
  26. }
  27. $boardMeta = $boardService->meta($board->id);
  28. // 목록 권한 확인
  29. $response = Gate::inspect('viewAny', ['App\Models\Board', $boardMeta]);
  30. if($response->denied()) {
  31. if($response->code() == 401) {
  32. return loginCheck(DIRECTORY_SEPARATOR);
  33. }else{
  34. return alert($response->message(), DIRECTORY_SEPARATOR);
  35. }
  36. }
  37. $request->merge([
  38. 'board' => $board,
  39. 'boardMeta' => $boardMeta
  40. ]);
  41. return $next($request);
  42. }
  43. }