BoardPolicy.php 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace App\Policies;
  3. use Illuminate\Auth\Access\HandlesAuthorization;
  4. use App\Models\Board;
  5. use App\Models\BoardMeta;
  6. use App\Models\User;
  7. use App\Services\BoardService;
  8. use App\Services\PostService;
  9. class BoardPolicy
  10. {
  11. use HandlesAuthorization;
  12. public BoardService $boardService;
  13. public PostService $postService;
  14. /**
  15. * Create a new policy instance.
  16. *
  17. * @return void
  18. */
  19. public function __construct()
  20. {
  21. $this->boardService = new BoardService();
  22. $this->postService = new PostService();
  23. }
  24. /**
  25. * Determine whether the user can view any models.
  26. *
  27. * @param \App\Models\User $user
  28. * @param \App\Models\BoardMeta $boardMeta
  29. * @return \Illuminate\Auth\Access\Response|bool
  30. */
  31. public function viewAny(?User $user, BoardMeta $boardMeta)
  32. {
  33. // 게시판 사용 권한 확인
  34. $permitValue = $boardMeta->item(BOARD_PERMIT_TYPE_1, 0);
  35. if ($permitValue == 1 && !$user) {
  36. return $this->deny('로그인 후 이용 해주세요.', 401);
  37. }else if($permitValue == 100 && !$user?->isAdministrator()) {
  38. return $this->deny(MAP_BOARD_PERMIT_ALERT_TYPE[BOARD_PERMIT_TYPE_1]);
  39. }
  40. // 1:1 문의 게시판은 로그인 후 이용할 수 있다.
  41. if($boardMeta->item('use_personal', 0)) {
  42. if(!$user) {
  43. return $this->deny('로그인 후 이용 해주세요.', 401);
  44. }
  45. }
  46. return true;
  47. }
  48. /**
  49. * Determine whether the user can create models.
  50. *
  51. * @param \App\Models\User $user
  52. * @param \App\Models\Board $board
  53. * @param \App\Models\BoardMeta $boardMeta
  54. * @return \Illuminate\Auth\Access\Response|bool
  55. */
  56. public function create(?User $user, Board $board, BoardMeta $boardMeta)
  57. {
  58. // 글 작성은 하루에 한번만 허용
  59. if ($boardMeta->item('use_only_one_post', 0)) {
  60. if ($this->postService->userPostRows($board, $user) >= 1) {
  61. return $this->deny('이 게시판은 하루에 한 글만 작성 가능합니다.');
  62. }
  63. }
  64. // 글쓰기 버튼 보이기
  65. if(!$boardMeta->item('always_show_write_button', 0)) {
  66. return false;
  67. }
  68. return true;
  69. }
  70. }