BoardAccess.php 1.4 KB

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