라러벨 - 손님 사용자 게이트: 초보자 가이드

안녕하세요, 열망하는 개발자 여러분! 오늘 우리는 라러벨의 세계로 뛰어들어 fascineting 개념인 Guest User Gates를 탐구해보겠습니다. 프로그래밍에 새로운 사람이라고 걱정하지 마세요 - 저는 수년 동안 수많은 학생들에게 단계별로 설명해온 바와 같이 모든 것을 단계별로 설명해드리겠습니다. 그러니 커피 한 잔을 챙겨서, 이 흥미로운 여정에 함께 동행해 주세요!

Laravel - Guest User Gates

Guest User Gates는 무엇인가요?

코드로 뛰어들기 전에, Guest User Gates에 대해 이해해보겠습니다. 집에서 파티를 열고 있다고 상상해보세요. 가까운 친구들과 잘 알지 않는 손님들에게는 다른 규칙을 가지고 있습니다. 라러벨의 Guest User Gates는 이와 같은 방식으로 작동합니다 - 익명 사용자가 애플리케이션에 로그인하지 않은 상태에서 규칙을 설정하는 데 도움을 줍니다.

왜 Guest User Gates가 필요한가요?

"왜 손님 사용자를 신경쓰죠? 모든 것을 공개로 만들 수 없나요?"라고 고민할 수도 있습니다. 그러나 제 청년, 웹 개발에서 보안은 매우 중요합니다. Guest User Gates를 사용하면 익명 사용자가 애플리케이션에서 무엇을 할 수 있고, 무엇을 할 수 없는지 통제할 수 있어, 우리의 디지털 파티를 안전하고 모두에게 즐겁게 만들 수 있습니다!

Guest User Gates 설정하기

이제 손을 dirtied하고 코드에 손을 대보겠습니다. 처음에는 어렵게 보일 수 있지만, 우리는 줄별로 살펴보겠습니다.

단계 1: 게이트 정의하기

먼저, 우리는 게이트를 정의해야 합니다. 라러벨에서는 일반적으로 AuthServiceProvider.php 파일에서 이를 수행합니다. 다음과 같이 보입니다:

use Illuminate\Support\Facades\Gate;

public function boot()
{
$this->registerPolicies();

Gate::define('view-post', function (?User $user) {
return true;
});
}

이를 해부해보겠습니다:

  1. 우리는 Gate 페이스드를 사용하고 있습니다. 이는 라러벨에서 작업을 인증하는 간단한 방법을 제공합니다.
  2. boot 메서드 내에서 새로운 게이트 'view-post'를 정의합니다.
  3. ?User $user 매개변수는 이 게이트를 인증된 사용자와 손님 사용자 모두에게 사용할 수 있게 합니다.
  4. 현재는 true를 반환하여 모든 사람( 손님 포함)이 게시물을 볼 수 있습니다.

단계 2: 컨트롤러에서 게이트 사용하기

이제 우리가 정의한 게이트를 컨트롤러에서 사용해보겠습니다:

use Illuminate\Support\Facades\Gate;

public function show(Post $post)
{
if (Gate::allows('view-post')) {
return view('posts.show', compact('post'));
}

abort(403);
}

여기서 일어나는 일:

  1. 현재 사용자( 손님 또는 인증된 사용자)가 게시물을 볼 수 있는지 확인합니다.
  2. 허용된 경우, 게시물을 반환합니다.
  3. 허용되지 않는 경우, 403( 금지) 오류로 중단합니다.

단계 3: 게이트에 로직 추가하기

우리의 게이트를 조금 더 지능적으로 만들겠습니다. 손님은 오직 공개된 게시물만 볼 수 있게 합니다:

Gate::define('view-post', function (?User $user, Post $post) {
return $post->published_at !== null;
});

이제 우리의 게이트는 두 가지 매개변수를 받습니다:

  1. 사용자( 손님의 경우 null일 수 있습니다)
  2. 시도하는 특정 게시물

우리는 게시물이 published_at 날짜를 가지고 있는지 확인하고 있습니다. 그렇다면, 게시물은 손님에 의해 시청 가능합니다.

단계 4: 컨트롤러 업데이트하기

이제 우리의 컨트롤러를 새로운 로직을 사용하도록 업데이트해보겠습니다:

public function show(Post $post)
{
if (Gate::allows('view-post', $post)) {
return view('posts.show', compact('post'));
}

abort(403);
}

여기서 유일한 변화는 $postGate::allows() 메서드에 전달하는 것입니다.

고급 Guest User Gates

이제 기본적인 내용을 이해했으므로, 더 고급 기술을 살펴보겠습니다.

손님과 인증된 사용자 로직 결합하기

occasionally, 손님과 인증된 사용자에게 다른 규칙을 적용하고 싶을 수 있습니다. 다음과 같이 할 수 있습니다:

Gate::define('view-post', function (?User $user, Post $post) {
if ($user === null) {
return $post->published_at !== null;
}

return $user->id === $post->user_id || $post->published_at !== null;
});

이 예제에서:

  • 손님은 오직 공개된 게시물만 볼 수 있습니다
  • 인증된 사용자는 자신의 게시물( 공개 여부와 상관없이)과 공개된 게시물을 볼 수 있습니다

블레이드 템플릿에서 게이트 사용하기

게이트는 컨트롤러에서만 사용할 수 있는 것이 아닙니다! 블레이드 템플릿에서도 사용할 수 있습니다:

@can('view-post', $post)
<h1>{{ $post->title }}</h1>
<p>{{ $post->content }}</p>
@else
<p>죄송합니다, 이 게시물을 볼 수 없습니다.</p>
@endcan

이렇게 하면 템플릿이 더욱 동적이고 안전해집니다.

Guest User Gates 최선의 관행

이제 마무리를 하면서, 수년 동안 배운 몇 가지 최선의 관행에 대해 이야기해보겠습니다:

  1. 간단하게 유지하기: 기본적인 게이트로 시작하고 필요에 따라 복잡성을 추가하세요.
  2. 명확하게 하기: 항상 권한을 확인하고, 라우트가 공개라 생각되더라도 그렇습니다.
  3. 정책 클래스 사용하기: 복잡한 인증 로직이 필요할 때 정책 클래스를 사용하는 것을 고려하세요.
  4. 게이트 테스트하기: 손님과 인증된 사용자 모두에게 게이트가 올바르게 동작하는지 테스트를 작성하세요.

결론

축하합니다! 지금 라러벨의 Guest User Gates 세계로 첫 걸음을 냈습니다. 자전거 타는 것을 배울 때처럼,처음에는 흔들릴 수 있지만, 연습을 하면 곧 자유자재로 타게 될 것입니다.

여기서 다루었던 메서드의 빠른 참조 표입니다:

메서드 설명
Gate::define() 새로운 게이트 정의
Gate::allows() 게이트가 작업을 허용하는지 확인
@can 게이트 확인을 위한 블레이드 디렉티브

계속 코딩하고, 배우고, 가장 중요한 것은 즐겁게 하세요! 누구나 라러벨의 기적을 새로운 세대의 개발자에게 가르치는 사람이 될 수 있을지도 모릅니다. 다음 번에 다시 만날 때까지, 행복한 코딩하세요!

Credits: Image by storyset