"Laravel 인가"의 두 판 사이의 차이

 
(같은 사용자의 중간 판 3개는 보이지 않습니다)
2번째 줄: 2번째 줄:
{{작성중}}
{{작성중}}
[[분류:Laravel]]
[[분류:Laravel]]
[[분류: 인가]]
;Authorization
;Authorization
;인가
;인가
7번째 줄: 8번째 줄:


==소개==
==소개==
Laravel은 빌트인 [[Laravel 인증|인증]] 서비스 외에도 주어진 리소스에 대해 사용자의 액션을 인가할 수 있는 간단한 방법을 제공합니다. 예를 들어, 사용자가 인증되었다 하더라도 애플리케이션에서 관리하는 특정 Eloquent 모델이나 데이터베이스 레코드를 업데이트하거나 삭제할 권한이 없을 수도 있습니다. Laravel의 인가 기능은 이러한 유형의 인가 확인을 관리하는 쉬운 방법을 제공합니다.
Laravel은 주로 두 가지 방식으로 액션을 인가합니다: [[#게이트|게이트(gate)]]와 [[#정책 생성|정책(policy)]]. 게이트와 정책을 라우트와 컨트롤러처럼 생각할 수 있습니다. 게이트는 간단한 클로저 기반 접근 방식을 제공하는 반면, 정책은 특정 모델이나 리소스를 중심으로 로직을 그룹화합니다. 이 문서에서는 먼저 게이트를 알아본 다음 정책을 살펴보겠습니다.
애플리케이션을 구축할 때 게이트만 사용하거나 정책만 사용하는 것을 선택할 필요는 없습니다. 대부분의 애플리케이션은 게이트와 정책이 혼합된 형태를 포함할 가능성이 높으며, 이는 전혀 문제가 되지 않습니다! 게이트는 관리자 대시보드를 보는 것과 같이 특정 모델이나 리소스와 관련이 없는 액션에 가장 적합합니다. 반면, 정책은 특정 모델이나 리소스에 대한 액션을 인가하고자 할 때 사용해야 합니다.
==게이트==
==게이트==
===게이트 작성===
===게이트 작성===
{{WARNING}}
게이트는 Laravel의 인가 기능의 기초를 배우는 훌륭한 방법입니다. 그러나 견고한 Laravel 애플리케이션을 구축할 때는 인가 규칙을 조직화하기 위해 [[#정책 생성|정책]]을 사용하는 것을 고려해야 합니다.
{{/WARNING}}
게이트는 단순히 사용자가 주어진 작업을 수행할 권한이 있는지를 결정하는 클로저입니다. 일반적으로 게이트는 <code>Gate</code> 파사드를 사용하여 <code>App\Providers\AppServiceProvider</code> 클래스의 <code>boot</code> 메소드 내에서 정의됩니다. 게이트는 항상 사용자 인스턴스를 첫 번째 인수로 받고, 선택적으로 관련 있는 Eloquent 모델과 같은 추가 인수를 받을 수 있습니다.
이 예제에서는 사용자가 주어진 <code>App\Models\Post</code> 모델을 업데이트할 수 있는지 여부를 결정하는 게이트를 정의합니다. 게이트는 사용자의 <code>id</code>를 게시물을 작성한 사용자의 <code>user_id</code>와 비교하여 이를 수행합니다:
<syntaxhighlight lang='php'>
use App\Models\Post;
use App\Models\User;
use Illuminate\Support\Facades\Gate;
/**
* 애플리케이션 서비스를 부트스트랩합니다.
*/
public function boot(): void
{
    Gate::define('update-post', function (User $user, Post $post) {
        return $user->id === $post->user_id;
    });
}
</syntaxhighlight>
컨트롤러와 마찬가지로, 게이트도 클래스 콜백 배열을 사용하여 정의할 수 있습니다:
<syntaxhighlight lang='php'>
use App\Policies\PostPolicy;
use Illuminate\Support\Facades\Gate;
/**
* 애플리케이션 서비스를 부트스트랩합니다.
*/
public function boot(): void
{
    Gate::define('update-post', [PostPolicy::class, 'update']);
}
</syntaxhighlight>
===액션 인가===  
===액션 인가===  
===게이트 응답===
===게이트 응답===
14번째 줄: 60번째 줄:
===인라인 인가===
===인라인 인가===
==정책 생성==
==정책 생성==
===정책 생성===
===정책 생성하기===
===정책 등록===
===정책 등록하기===
 
==정책 작성==
==정책 작성==
===정책 메소드===
===정책 메소드===

2024년 7월 1일 (월) 01:50 기준 최신판

1 개요[ | ]

Crystal Clear action info.png 작성 중인 문서입니다.
Authorization
인가

https://laravel.com/docs/11.x/authorization

2 소개[ | ]

Laravel은 빌트인 인증 서비스 외에도 주어진 리소스에 대해 사용자의 액션을 인가할 수 있는 간단한 방법을 제공합니다. 예를 들어, 사용자가 인증되었다 하더라도 애플리케이션에서 관리하는 특정 Eloquent 모델이나 데이터베이스 레코드를 업데이트하거나 삭제할 권한이 없을 수도 있습니다. Laravel의 인가 기능은 이러한 유형의 인가 확인을 관리하는 쉬운 방법을 제공합니다.

Laravel은 주로 두 가지 방식으로 액션을 인가합니다: 게이트(gate)정책(policy). 게이트와 정책을 라우트와 컨트롤러처럼 생각할 수 있습니다. 게이트는 간단한 클로저 기반 접근 방식을 제공하는 반면, 정책은 특정 모델이나 리소스를 중심으로 로직을 그룹화합니다. 이 문서에서는 먼저 게이트를 알아본 다음 정책을 살펴보겠습니다.

애플리케이션을 구축할 때 게이트만 사용하거나 정책만 사용하는 것을 선택할 필요는 없습니다. 대부분의 애플리케이션은 게이트와 정책이 혼합된 형태를 포함할 가능성이 높으며, 이는 전혀 문제가 되지 않습니다! 게이트는 관리자 대시보드를 보는 것과 같이 특정 모델이나 리소스와 관련이 없는 액션에 가장 적합합니다. 반면, 정책은 특정 모델이나 리소스에 대한 액션을 인가하고자 할 때 사용해야 합니다.

3 게이트[ | ]

3.1 게이트 작성[ | ]

Warning

게이트는 Laravel의 인가 기능의 기초를 배우는 훌륭한 방법입니다. 그러나 견고한 Laravel 애플리케이션을 구축할 때는 인가 규칙을 조직화하기 위해 정책을 사용하는 것을 고려해야 합니다.

게이트는 단순히 사용자가 주어진 작업을 수행할 권한이 있는지를 결정하는 클로저입니다. 일반적으로 게이트는 Gate 파사드를 사용하여 App\Providers\AppServiceProvider 클래스의 boot 메소드 내에서 정의됩니다. 게이트는 항상 사용자 인스턴스를 첫 번째 인수로 받고, 선택적으로 관련 있는 Eloquent 모델과 같은 추가 인수를 받을 수 있습니다.

이 예제에서는 사용자가 주어진 App\Models\Post 모델을 업데이트할 수 있는지 여부를 결정하는 게이트를 정의합니다. 게이트는 사용자의 id를 게시물을 작성한 사용자의 user_id와 비교하여 이를 수행합니다:

use App\Models\Post;
use App\Models\User;
use Illuminate\Support\Facades\Gate;

/**
 * 애플리케이션 서비스를 부트스트랩합니다.
 */
public function boot(): void
{
    Gate::define('update-post', function (User $user, Post $post) {
        return $user->id === $post->user_id;
    });
}

컨트롤러와 마찬가지로, 게이트도 클래스 콜백 배열을 사용하여 정의할 수 있습니다:

use App\Policies\PostPolicy;
use Illuminate\Support\Facades\Gate;

/**
 * 애플리케이션 서비스를 부트스트랩합니다.
 */
public function boot(): void
{
    Gate::define('update-post', [PostPolicy::class, 'update']);
}

3.2 액션 인가[ | ]

3.3 게이트 응답[ | ]

3.4 게이트 체크 가로채기[ | ]

3.5 인라인 인가[ | ]

4 정책 생성[ | ]

4.1 정책 생성하기[ | ]

4.2 정책 등록하기[ | ]

5 정책 작성[ | ]

5.1 정책 메소드[ | ]

5.2 정책 응답[ | ]

5.3 모델 없는 메소드[ | ]

5.4 게스트 사용자[ | ]

5.5 정책 필터[ | ]

6 정책을 사용한 액션 인가[ | ]

6.1 사용자 모델을 통해[ | ]

6.2 게이트 파사드를 통해[ | ]

6.3 미들웨어를 통해[ | ]

6.4 Blade 템플릿을 통해[ | ]

6.5 추가 컨텍스트 제공[ | ]

7 인가 & Inertia[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}