ホームページ  >  記事  >  バックエンド開発  >  Laravel での認可 - 初心者ガイド

Laravel での認可 - 初心者ガイド

DDD
DDDオリジナル
2024-09-13 08:15:31877ブラウズ

Authorization In Laravel - A Beginner

Laravel で認可をマスターする: ゲート vs. ポリシー クラス ??

最新の Web アプリケーションでは、リソースにアクセスまたは変更できるユーザーを制御することが重要です。たとえば、ブログ アプリケーションでは、投稿の所有者のみが投稿を編集または削除できるようにしたい場合があります。 Laravel は、承認を処理する 2 つのエレガントな方法、ゲートポリシー クラス を提供します。このガイドでは両方の方法を説明し、リソースを保護し、アプリケーションのセキュリティを確保する方法を示します。

Laravel のゲート ?

ゲートは、クロージャを使用して認可を処理する迅速かつ簡単な方法を提供します。これらは単純な認証チェックに最適であり、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 操作 (indexcreateeditupdate、および を破壊します。

ポリシーの作成と使用

  1. ポリシーの生成: Artisan を使用してポリシー クラスを作成します:

    php artisan make:policy PostPolicy
    
  2. ポリシー メソッドの定義: 生成されたポリシー クラスを開き、各アクションの承認を処理するメソッドを追加します。

    // 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
    
    use Illuminate\Http\Request;
    use App\Models\Post;
    
    public function update(Request $request, Post $post)
    {
        $this->authorize('update', $post);
        // Proceed with updating the post
    }
    
    public function destroy(Post $post)
    {
        $this->authorize('delete', $post);
        // Proceed with deleting the post
    }
    
ポリシークラスの長所と短所

長所:

  • 組織: 複雑な承認ロジックを処理するクリーンで組織的な方法を提供します。 ?
  • 保守性: アプリケーションの成長に応じて管理と保守が容易になります。 ?️
  • フレームワークサポート: 一貫した認可のために、Laravel の組み込みフレームワークサポートを活用します。 ?

短所:

  • 初期セットアップ: ゲートと比較してセットアップが若干多くなります。 ⚙️
  • 複雑さ: 非常に単純な認証シナリオでは過剰になる可能性があります。 ?

ベストケース シナリオ: 複雑な認証要件があるアプリケーション、またはクリーンで保守可能なコードを目指す場合に最適です。 ?


まとめ

Laravel のゲートクラスとポリシークラスは両方とも、承認を処理する強力な方法を提供します。ゲートは迅速かつ単純なチェックに優れており、ポリシー クラスは、特に

indexcreateedit、更新、および破棄。アプリケーションのニーズに最適な方法を選択し、安全でよく整理されたコードベースを活用してください。 ??

以上がLaravel での認可 - 初心者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。