라러벨 - 손님 사용자 게이트: 초보자 가이드
안녕하세요, 열망하는 개발자 여러분! 오늘 우리는 라러벨의 세계로 뛰어들어 fascineting 개념인 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;
});
}
이를 해부해보겠습니다:
- 우리는
Gate
페이스드를 사용하고 있습니다. 이는 라러벨에서 작업을 인증하는 간단한 방법을 제공합니다. -
boot
메서드 내에서 새로운 게이트 'view-post'를 정의합니다. -
?User $user
매개변수는 이 게이트를 인증된 사용자와 손님 사용자 모두에게 사용할 수 있게 합니다. - 현재는
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);
}
여기서 일어나는 일:
- 현재 사용자( 손님 또는 인증된 사용자)가 게시물을 볼 수 있는지 확인합니다.
- 허용된 경우, 게시물을 반환합니다.
- 허용되지 않는 경우, 403( 금지) 오류로 중단합니다.
단계 3: 게이트에 로직 추가하기
우리의 게이트를 조금 더 지능적으로 만들겠습니다. 손님은 오직 공개된 게시물만 볼 수 있게 합니다:
Gate::define('view-post', function (?User $user, Post $post) {
return $post->published_at !== null;
});
이제 우리의 게이트는 두 가지 매개변수를 받습니다:
- 사용자( 손님의 경우 null일 수 있습니다)
- 시도하는 특정 게시물
우리는 게시물이 published_at
날짜를 가지고 있는지 확인하고 있습니다. 그렇다면, 게시물은 손님에 의해 시청 가능합니다.
단계 4: 컨트롤러 업데이트하기
이제 우리의 컨트롤러를 새로운 로직을 사용하도록 업데이트해보겠습니다:
public function show(Post $post)
{
if (Gate::allows('view-post', $post)) {
return view('posts.show', compact('post'));
}
abort(403);
}
여기서 유일한 변화는 $post
를 Gate::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 최선의 관행
이제 마무리를 하면서, 수년 동안 배운 몇 가지 최선의 관행에 대해 이야기해보겠습니다:
- 간단하게 유지하기: 기본적인 게이트로 시작하고 필요에 따라 복잡성을 추가하세요.
- 명확하게 하기: 항상 권한을 확인하고, 라우트가 공개라 생각되더라도 그렇습니다.
- 정책 클래스 사용하기: 복잡한 인증 로직이 필요할 때 정책 클래스를 사용하는 것을 고려하세요.
- 게이트 테스트하기: 손님과 인증된 사용자 모두에게 게이트가 올바르게 동작하는지 테스트를 작성하세요.
결론
축하합니다! 지금 라러벨의 Guest User Gates 세계로 첫 걸음을 냈습니다. 자전거 타는 것을 배울 때처럼,처음에는 흔들릴 수 있지만, 연습을 하면 곧 자유자재로 타게 될 것입니다.
여기서 다루었던 메서드의 빠른 참조 표입니다:
메서드 | 설명 |
---|---|
Gate::define() |
새로운 게이트 정의 |
Gate::allows() |
게이트가 작업을 허용하는지 확인 |
@can |
게이트 확인을 위한 블레이드 디렉티브 |
계속 코딩하고, 배우고, 가장 중요한 것은 즐겁게 하세요! 누구나 라러벨의 기적을 새로운 세대의 개발자에게 가르치는 사람이 될 수 있을지도 모릅니다. 다음 번에 다시 만날 때까지, 행복한 코딩하세요!
Credits: Image by storyset