[Laravel] Policy 폴리시

2025. 5. 27. 22:46·Laravel

 


 

1. Policy란

라라벨의 Policy는 특정 모델(예: Post, User 등)이나 리소스에 대한 권한(Authorization) 로직을 클래스 단위로 정리하는 기능이다. 예를 들어 블로그 애플리케이션에서 사용자가 게시글을 생성, 수정, 삭제할 권한이 있는지 판단하는 로직을 Policy에 정의한다.

 

2. Policy 생성

php artisan make:policy PostPolicy

artisan 명령어로 생성한다.

 

php artisan make:policy PostPolicy --model=Post

CRUD 관련 메서드가 자동으로 포함된 Policy를 만들고 싶다면, `--model` 옵션을 사용한다.

 

생성된 Policy 클래스는 기본적으로 `app/Policies` 디렉터리에 위치한다.

 

3. Policy 등록

protected $policies = [
    \App\Models\Post::class => \App\Policies\PostPolicy::class,
];
  • 'AuthServiceProvider'의 '$policies' 속성에 모델과 Policy를 매핑해야 한다.
  • 라라벨의 네이밍 규칙을 따르면 자동으로 Policy를 매핑해주는 Auto-Discovery 기능도 지원한다.
    • Policy 클래스의 이름은 해당 모델 이름과 같아야 하며, 뒤에 'Policy'라는 접미사가 붙어있어야 한다. (예: 'User' 모델 -> 'UserPolicy' 클래스)

 

4. Policy 메서드 작성

// 게시글 작성자만 갱신할 수 있도록 작성하는 예시
public function update(User $user, Post $post)
{
    return $user->id === $post->user_id;
}

Policy 클래스에는 권한을 확인할 각 액션(예: view, create, update, delete)에 대한 메서드를 정의한다.

 

5. Policy 사용

// 1. 서비스, 컨트롤러에서 can, cannot 매서드 사용
if ($user->can('update', $post)) {
    // 내용 삽입
}

// 2. 컨트롤러에서 authorize 메서드 사용
$this->authorize('update', $post);

// 3. 모델 인스턴스가 필요 없는 액션(예: create)에는 클래스명을 인자로 넘길 수 있음
$user->can('create', Post::class); // Policy의 `create` 메서드가 실행됨

'Laravel' 카테고리의 다른 글

[Laravel] Laravel+Vite+Inertia.js 환경에서 번들(Bundle) 경고  (0) 2025.06.11
[Laravel] SQL Log  (0) 2025.06.02
[Laravel] FormRequest 폼 리퀘스트  (0) 2025.05.11
[Laravel] Soft Deleting  (0) 2024.12.18
[Laravel] 라라벨 프로젝트에 Tailwind CSS 적용하기  (0) 2024.11.09
'Laravel' 카테고리의 다른 글
  • [Laravel] Laravel+Vite+Inertia.js 환경에서 번들(Bundle) 경고
  • [Laravel] SQL Log
  • [Laravel] FormRequest 폼 리퀘스트
  • [Laravel] Soft Deleting
초오오이
초오오이
  • 초오오이
    초이
    초오오이
  • 전체
    오늘
    어제
    • 분류 전체보기 (101)
      • PHP (4)
      • Laravel (7)
      • Vue.js (5)
      • CS (73)
        • WEB (1)
        • 컴퓨터 구조 (12)
        • 운영체제 (24)
        • 네트워크 (24)
        • 자료구조 & 알고리즘 (12)
      • etc (6)
        • 자격증 (3)
  • 인기 글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
초오오이
[Laravel] Policy 폴리시
상단으로

티스토리툴바