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 |