"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Laravel의 인증 - 초보자 가이드

Laravel의 인증 - 초보자 가이드

2024-11-07에 게시됨
검색:695

Authorization In Laravel - A Beginner

Laravel에서 권한 부여 마스터하기: 게이트 대 정책 클래스 ??

최신 웹 애플리케이션에서는 리소스에 액세스하거나 수정할 수 있는 사람을 제어하는 ​​것이 중요합니다. 예를 들어, 블로그 애플리케이션에서는 게시물 소유자만 게시물을 편집하거나 삭제할 수 있도록 할 수 있습니다. Laravel은 인증을 처리하는 두 가지 우아한 방법을 제공합니다: 게이트정책 클래스. 이 가이드는 두 가지 방법을 모두 안내하며 리소스를 보호하고 애플리케이션의 보안을 보장하는 방법을 보여줍니다.

Laravel의 게이트?

Gates는 클로저를 사용하여 인증을 처리하는 빠르고 간단한 방법을 제공합니다. 이는 간단한 인증 확인에 적합하며 AuthServiceProvider에 정의되어 있습니다.

게이트 설정

게시물 소유자만 게시물을 업데이트하거나 삭제할 수 있도록 게이트를 정의해 보겠습니다.

  1. 게이트 정의: AuthServiceProvider를 열고 게이트 정의를 추가합니다.

    // app/Providers/AuthServiceProvider.php
    
    use Illuminate\Support\Facades\Gate;
    use App\Models\Post;
    
    public function boot()
    {
        $this->registerPolicies();
    
        Gate::define('update-post', function ($user, Post $post) {
            return $user->id === $post->user_id;
        });
    
        Gate::define('delete-post', function ($user, Post $post) {
            return $user->id === $post->user_id;
        });
    }
    
  2. 게이트 적용: 컨트롤러 메소드에서 게이트를 사용하여 인증 논리를 시행합니다.

    // app/Http/Controllers/PostController.php
    
    use Illuminate\Http\Request;
    use Illuminate\Support\Facades\Gate;
    use App\Models\Post;
    
    public function update(Request $request, Post $post)
    {
        if (Gate::denies('update-post', $post)) {
            abort(403, 'You do not own this post. ?');
        }
    
        // Proceed with updating the post
    }
    
    public function destroy(Post $post)
    {
        if (Gate::denies('delete-post', $post)) {
            abort(403, 'You do not own this post. ?');
        }
    
        // Proceed with deleting the post
    }
    

게이츠의 장점과 단점

장점:

  • 단순성: 최소한의 코드로 빠르게 설정할 수 있습니다. ⚡
  • 단순성에 이상적: 단일 리소스 애플리케이션 또는 간단한 시나리오에 적합합니다. ?

단점:

  • 확장성: 애플리케이션이 성장함에 따라 관리가 번거롭고 어려워질 수 있습니다. ?
  • 유지 관리: 잘 정리하지 않으면 지저분해질 수 있습니다. ?

최고의 사용 사례: 빠른 인증 확인이 필요한 소규모 애플리케이션 또는 간단한 사용 사례입니다. ?

Laravel의 정책 클래스 ?️

정책 클래스는 인증 처리에 대한 보다 구조화되고 확장 가능한 접근 방식을 제공합니다. 복잡한 인증 규칙을 관리하고 코드를 체계적으로 유지하는 명확한 방법을 제공합니다. 정책은 표준 CRUD 작업(index, create, edit, update 및 [)을 포함하는 리소스 컨트롤러로 작업할 때 특히 유용합니다. &&&]파괴하다.

정책 생성 및 사용

  1. 정책 생성: Artisan을 사용하여 정책 클래스를 생성합니다:

    php artisan make:policy PostPolicy
    php artisan make:policy PostPolicy
    
  2. 정책 방법 정의: 생성된 정책 클래스를 열고 각 작업에 대한 인증을 처리하는 방법을 추가합니다.

    // app/Policies/PostPolicy.php 네임스페이스 App\Policies; 앱\모델\사용자를 사용합니다. 앱\모델\포스트를 사용하세요. 클래스 PostPolicy { /** * 사용자가 게시물 목록을 볼 수 있는지 확인합니다. * * @param 사용자 $user * @return 부울 */ 공개 함수 viewAny(사용자 $user) { // 인증된 사용자의 게시물 보기를 허용하는 로직 예시 사실을 반환; } /** * 사용자가 게시물을 작성할 수 있는지 확인합니다. * * @param 사용자 $user * @return 부울 */ 공개 함수 생성(사용자 $user) { 사실을 반환; } /** * 사용자가 게시물을 업데이트할 수 있는지 확인합니다. * * @param 사용자 $user * @param 포스트 $post * @return 부울 */ 공개 기능 업데이트(사용자 $user, 게시 $post) { return $user->id === $post->user_id; } /** * 사용자가 게시물을 삭제할 수 있는지 확인합니다. * * @param 사용자 $user * @param 포스트 $post * @return 부울 */ 공개 함수 삭제(사용자 $user, 게시 $post) { return $user->id === $post->user_id; } }
    // app/Policies/PostPolicy.php
    
    namespace App\Policies;
    
    use App\Models\User;
    use App\Models\Post;
    
    class PostPolicy
    {
        /**
         * Determine if the user can view the list of posts.
         *
         * @param User $user
         * @return bool
         */
        public function viewAny(User $user)
        {
            // Example logic to allow viewing posts for authenticated users
            return true;
        }
    
        /**
         * Determine if the user can create a post.
         *
         * @param User $user
         * @return bool
         */
        public function create(User $user)
        {
            return true;
        }
    
        /**
         * Determine if the user can update the post.
         *
         * @param User $user
         * @param Post $post
         * @return bool
         */
        public function update(User $user, Post $post)
        {
            return $user->id === $post->user_id;
        }
    
        /**
         * Determine if the user can delete the post.
         *
         * @param User $user
         * @param Post $post
         * @return bool
         */
        public function delete(User $user, Post $post)
        {
            return $user->id === $post->user_id;
        }
    }
    
  3. 정책 사용: 컨트롤러 작업에 정책 메서드를 적용합니다.

    // app/Http/Controllers/PostController.php Illuminate\Http\Request를 사용하세요; 앱\모델\포스트를 사용하세요. 공개 기능 업데이트($request 요청, $post 게시) { $this->authorize('업데이트', $post); // 게시물 업데이트를 진행합니다. } 공개 함수 파괴(Post $post) { $this->authorize('삭제', $post); // 게시물 삭제를 진행합니다. }
    // app/Policies/PostPolicy.php
    
    namespace App\Policies;
    
    use App\Models\User;
    use App\Models\Post;
    
    class PostPolicy
    {
        /**
         * Determine if the user can view the list of posts.
         *
         * @param User $user
         * @return bool
         */
        public function viewAny(User $user)
        {
            // Example logic to allow viewing posts for authenticated users
            return true;
        }
    
        /**
         * Determine if the user can create a post.
         *
         * @param User $user
         * @return bool
         */
        public function create(User $user)
        {
            return true;
        }
    
        /**
         * Determine if the user can update the post.
         *
         * @param User $user
         * @param Post $post
         * @return bool
         */
        public function update(User $user, Post $post)
        {
            return $user->id === $post->user_id;
        }
    
        /**
         * Determine if the user can delete the post.
         *
         * @param User $user
         * @param Post $post
         * @return bool
         */
        public function delete(User $user, Post $post)
        {
            return $user->id === $post->user_id;
        }
    }
    
정책 클래스의 장점과 단점

장점:

  • 조직: 복잡한 인증 논리를 처리하기 위한 깔끔하고 체계적인 방법을 제공합니다. ?
  • 유지관리성: 애플리케이션이 성장함에 따라 관리 및 유지 관리가 더 쉬워졌습니다. ?️
  • 프레임워크 지원: 일관된 인증을 위해 Laravel의 내장 프레임워크 지원을 활용합니다. ?

단점:

  • 초기 설정: 게이트에 비해 설정이 약간 더 많습니다. ⚙️
  • 복잡성: 매우 간단한 인증 시나리오에서는 과도할 수 있습니다. ?

최상의 시나리오: 인증 요구 사항이 복잡한 애플리케이션이나 깔끔하고 유지 관리 가능한 코드를 목표로 하는 경우에 이상적입니다. ?


요약

Laravel의 Gate와 정책 클래스는 모두 인증을 처리하는 강력한 방법을 제공합니다. Gates는 빠르고 간단한 검사에 탁월한 반면, 정책 클래스는 특히

index, create, edit, 업데이트파기. 애플리케이션의 요구 사항에 가장 적합한 방법을 선택하고 안전하고 잘 구성된 코드베이스를 즐겨보세요! ??

릴리스 선언문 이 글은 https://dev.to/mohammed_kareem/authorization-in-laravel-a-beginners-guide-32kf?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3