Gate: 간단한 권한 확인
사용자 동작의 권한 로직을 위한 Gate를 정의하고 평가합니다.
Gate: 간단한 권한 확인은(는) CoddyKit의 무료 PHP Academy 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 PHP Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
게이트란 무엇인가요
Laravel 게이트는 사용자가 특정 작업을 수행할 권한이 있는지 판단하는 클로저입니다. 특정 모델에 연결되지 않은 간단한 전역 권한 부여 확인에 사용됩니다.
게이트 정의하기
App\Providers\AppServiceProvider 또는 전용 AuthServiceProvider에서 Gate 파사드를 사용하여 게이트를 정의합니다.
<?php
use Illuminate\Support\Facades\Gate;
// In a service provider's boot() method:
Gate::define("delete-post", function (User $user, Post $post) {
return $user->id === $post->user_id;
});게이트 확인하기(허용 및 거부)
Gate::allows() 또는 Gate::denies()로 게이트 결과를 확인합니다.
<?php
if (Gate::allows("delete-post", $post)) {
$post->delete();
}
if (Gate::denies("delete-post", $post)) {
abort(403);
}컨트롤러에서 authorize() 사용하기
컨트롤러 내부에서 $this->authorize()를 호출하면 실패 시 AuthorizationException(403)이 자동으로 발생합니다.
<?php
public function destroy(Post $post): RedirectResponse
{
$this->authorize("delete-post", $post);
$post->delete();
return redirect()->route("posts.index");
}Blade에서 @can 사용하기
@can 지시어를 사용하면 게이트 확인 결과에 따라 사용자 인터페이스를 조건부로 표시할 수 있습니다.
@can('delete-post', $post)
<form method="POST" action="/posts/{{ $post->id }}">
@csrf @method('DELETE')
<button>Delete</button>
</form>
@endcanGate::before
before 콜백은 다른 모든 게이트 확인보다 먼저 실행됩니다. 관리자에게 제한 없이 권한을 부여할 때 유용합니다.
<?php
Gate::before(function (User $user, string $ability) {
if ($user->isAdmin()) return true; // skip further checks
});Gate::after
after는 모든 게이트 확인 후에 실행됩니다. null이 아닌 반환 값은 게이트 결과를 덮어씁니다.
응답 반환하기
게이트는 사용자 지정 오류 메시지를 위해 Response 객체를 반환할 수 있습니다.
<?php
Gate::define("publish-post", function (User $user, Post $post) {
return $user->isEditor()
? Response::allow()
: Response::deny("You must be an editor to publish.");
});forUser()
인증된 사용자가 아닌 다른 사용자에 대해 게이트를 확인합니다.
<?php
if (Gate::forUser($otherUser)->allows("delete-post", $post)) {
// ...
}게스트 사용자
기본적으로 게이트는 인증되지 않은 사용자에게 자동으로 false를 반환합니다. 게스트 확인을 허용하려면 사용자를 null 허용 형식으로 타입 힌트합니다.
<?php
Gate::define("view-post", function (?User $user, Post $post) {
return $post->is_published || $user?->id === $post->user_id;
});게이트와 정책 비교
게이트는 필요에 따라 사용하는 간단한 클로저입니다. 정책은 모델 기반 권한 부여를 위한 클래스입니다. 동일한 모델에 여러 작업이 있다면 정책을 사용합니다.
요약
게이트는 전역 권한 부여 클로저입니다. 서비스 공급자에서 정의하고, Blade에서 Gate::allows(), $this->authorize() 또는 @can으로 확인합니다.
빠른 확인
게이트 확인에 실패했을 때 자동으로 403을 발생시키는 컨트롤러 메서드는 무엇인가요?
자주 묻는 질문
“Gate: 간단한 권한 확인” 강의는 무료인가요?
네 — “Gate: 간단한 권한 확인” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 PHP Academy 강의 전체를 잠금 해제할 수 있습니다. PHP Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“Gate: 간단한 권한 확인”에서 뭘 배우나요?
사용자 동작의 권한 로직을 위한 Gate를 정의하고 평가합니다. 브라우저에서 직접 실행하는 실습 코드로 PHP Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
PHP Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 PHP Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“Gate: 간단한 권한 확인” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 PHP Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 PHP Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Laravel Breeze로 인증하기
- 미들웨어로 경로 보호하기
- Gate: 간단한 권한 확인
- Policy: 모델 기반 권한 부여