ホームページ  >  記事  >  PHPフレームワーク  >  Laravel のインターセプター (Gates) について話しましょう

Laravel のインターセプター (Gates) について話しましょう

青灯夜游
青灯夜游転載
2022-09-28 19:59:341652ブラウズ

Laravel のインターセプター (Gates) について話しましょう

Laravel Gates (インターセプター) を使用すると、ユーザーがアプリケーションの特定の領域にアクセスすることを承認できます。アプリケーションでインターセプタを簡単に定義し、それを使用してアクセスを許可または拒否できます。

簡単な例

ユーザー テーブルに admin という名前の列があるとします。ユーザーが管理者であるかどうかに応じて、次のことができます。 1 または 0 です。次のような簡単なチェックを行うことで、アプリケーションの一部であるモジュールを簡単に保護できます。

Route::get('administration', function(){
    if(auth()->check() && auth()->user()->admin){
        echo 'Welcome to the admin section';
    } else {
        echo 'You shall not pass';
    }
});

特定のユーザーの admin 行が 1 に設定されている場合、次の出力が表示されます。

Admin access screenshot

そうしないと、次のようなメッセージが表示されます:

Admin denied access

これは素晴らしいですね!アプリケーションの特定の部分へのアクセスを許可または拒否する簡単な方法があります。ただし、問題は、アプリケーション全体でユーザーのアクセス許可を確認および変更する必要がある場所が多数ある場合はどうなるかということです。コードをグローバルに検索し、あらゆる場所でこのロジックを変更する必要があります。あまり効率的ではありません。

このために、ゲート (インターセプター) を定義し、アプリケーション全体でそれを使用できます。

インターセプターの定義

インターセプターを定義するには、App\Providers\AuthServiceProvider.php ファイルを開き、 boot () 次の内容をメソッドに追加します。

public function boot()
{
    $this->registerPolicies();

    Gate::define('access-admin', function ($user) {
        return $user->admin;
    });
}

このインターセプターは、管理者ユーザーを認証するアプリケーション全体のどこでも使用できます。次のセクションでは、この新しいインターセプターをどのように使用するかを見ていきます。

インターセプターの使用

インターセプターを使用するには、Gate::allows() または Gate::denies( )# を呼び出します。 ## メソッド、以下に示すように:

Route::get('administration', function(){
    if (Gate::allows('access-admin')) {
        echo 'Welcome to the admin section';
    } else {
        echo 'You shall not pass';
    }
});
注意してください:

Gate::denies() メソッドは Gate::allows() を実行します。逆引きチェック

インターセプタを実行することの利点は、いつでも定義を変更できるようになり、認可ロジックがアプリケーション全体で同期して変更されることです。

インターセプターを使用するもう 1 つの目的は、データに関連するアクセス許可を確認することです。ブログを例に挙げると、ユーザーが作成した投稿に対する編集権限を付与できます。

データをインターセプターに渡して、ユーザーがアクションを実行する権限を持っているかどうかを確認できます。

インターセプターのようにデータを渡す

アプリケーションに

user_id という列を持つ Post テーブルがあるとします。作成したユーザーの ID。次のようにゲート (インターセプター) を定義して、ユーザーが特定の投稿を編集できるかどうかを決定できます。

Gate::define('edit-post', function ($user, $post) {
    return $user->id === $post->user_id;
});
2 つのパラメーターがインターセプター定義に渡されます。 1 つ目は認証されたユーザーを含む

$user オブジェクトで、2 つ目のパラメータは $post オブジェクトです。

ヒント: 認証されたユーザーが存在しない場合、インターセプターは false を返します。

インターセプタは、認証されたユーザーが元の作成者であればアクセスを許可しますが、それ以外の場合はアクセスを拒否します。

これは、新しい

edit-post インターセプターの使用方法の簡単な例です。

Route::get('edit/{id}', function($id){

    $post = \App\Model\Post::find($id);

    if( Gate::allows('edit-post', $post) ){
        echo 'You can edit this post';
    } else {
        echo 'You shall not pass';
    }

});
上の例では

Route Closures を使用しましたが、このルートをコントローラーにマップすることもできます。これにより、新しい Authorize 関数も使用できるようになります。

認可認可ヘルパー関数

効率性に加えて、インターセプタを使用するもう 1 つの理由はヘルパー関数です。

ルートをコントローラーにマップするとします。

Route::get('edit/{id}', 'PostController@edit');

authorize() ヘルパーを使用して、認証されたユーザーに投稿を編集する権限があるかどうかを確認できます。

<?php namespace App\Http\Controllers;

use App\Models\Post;
use Illuminate\Http\Request;

class PostController extends Controller
{
    public function edit($id){

        $post = Post::find($id);
        $this->authorize('edit-post', $post);

    }
}
コントローラーが

App\Http\Controllers\Controller 基本クラスから継承している場合は、Gate::allow()## と同じように 関数を使用できます。 # function authorize() ヘルパー関数。 最後に、ビューで承認を確認したい場合はどうすればよいでしょうか?これは、

@can

Blade 関数ヘルパーを使用して行うことができます。

ビュー層での認証

ブレード ビューが次のようになっていると仮定します。

nbsp;html>


    <meta>
    <meta>
    <title>{{ $post->title }}</title>


    <h1>{{ $post->title }}</h1>
    <p>{!! $post->body !!}</p>

ブレード ヘルパー関数を使用できます

@ can

現在のユーザーがこの投稿の編集を許可されているかどうかを確認します: <pre class="brush:php;toolbar:false">nbsp;html&gt;     &lt;meta&gt;     &lt;meta&gt;     &lt;title&gt;{{ $post-&gt;title }}&lt;/title&gt;     &lt;h1&gt;{{ $post-&gt;title }}&lt;/h1&gt;     &lt;p&gt;{!! $post-&gt;body !!}&lt;/p&gt;     @can('edit-post', $post)         <a>id }}">Edit Post</a>     @endcan </pre> 認証されたユーザーが投稿の元の作成者である場合、「

投稿の編集

」ボタンが表示されます。

@can

ヘルパー関数を使用すると、コードの読み取りと管理が容易になります。 @cannot を使用して操作を元に戻すこともできます。

概要

これは、Laravel アプリケーションでのゲート (インターセプター) の使用の基本です。インターセプターを使用すると、特定のユーザーがアプリケーションの領域にアクセスすることを簡単に承認できます。これは、オブジェクトに関連付けられた権限のリストであるアクセス制御リスト (ACL) とも呼ばれます。

しかし、物事を複雑にしすぎないでください... 最も単純なシナリオでは、アクセスを許可または拒否するために Interceptors が使用されます。ユーザーは、認可を許可されることも拒否されることもできます。

このチュートリアルは、ユーザーに理解してもらうことではなく、理解してもらうことを目的としているため、ロード オブ ザ リングのガンダルフの画像 (手動の犬の頭) を送信するのは理にかなっています。

Laravel のインターセプター (Gates) について話しましょう

Laravel Gates (インターセプター) の詳細については、必ず Larav 認証ドキュメントを参照してください。

英語のオリジナルアドレス: https://devdojo.com/tnylea/laravel-gates

翻訳アドレス: https://learnku.com/laravel/t/67585

[関連する推奨事項: laravel ビデオチュートリアル]

以上がLaravel のインターセプター (Gates) について話しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。