「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Laravel での認可 - 初心者ガイド

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

2024 年 11 月 7 日に公開
ブラウズ:104

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
    }
    

ポリシークラスの長所と短所

長所:

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

短所:

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

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


まとめ

Laravel のゲートクラスとポリシークラスは両方とも、承認を処理する強力な方法を提供します。ゲートは迅速かつ単純なチェックに優れており、ポリシー クラスは、特に indexcreateedit などのメソッドを使用するリソース コントローラーで、複雑なシナリオを管理するための構造化されたアプローチを提供します。 ]、更新、および破棄。アプリケーションのニーズに最適な方法を選択し、安全でよく整理されたコードベースを活用してください。 ??

リリースステートメント この記事は次の場所に転載されています: https://dev.to/mohammed_kareem/authorization-in-laravel-a-beginners-guide-32kf?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3