Laravelポリシーの概要
2018年12月30日 。 Laravel 。 7.6Kビュー
あなたはLaravel方針について聞いた、まだ、まだそれを使用しない場合は、Laravelポリシーポストへのこの導入は、あなたのためです。このチュートリアルでは、私がどのように初心者のためのLaravelポリシーを使用するには、現実のチュートリアルを書きます。
Laravelポリシーとは何ですか
Laravelポリシーは、不正なアクセスからコンテンツやリソースを保護するのに役立つLaravelの認証の一部です。
ちょうどあなたがユーザーと投稿が含まれているブログを持っているシンプルなコンセプトを想像してみてください。通常のポストはしかし、ポストを編集することが、あなたはポストの所有者である必要があり、すべての訪問者に見えるようにすることができます。このチュートリアルでは、私はポストの所有者に編集後のオプションを表示する方法を紹介します。
この基本的な考え方は、IS-アプリ
- ユーザーは、投稿を作成することができます
- ポストは、訪問者/ユーザが見ることができます
- ポストの作成者のみが投稿を編集することができます
- ポストの作成者はのみできるようにすることができます削除します
基本構成
まずは、データベースに接続してみましょう。あなた.envファイルでは、次のように更新します。私のデータベース名です laravel-policy
。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-policy
DB_USERNAME=root
DB_PASSWORD=
次に、投稿やユーザーテーブルの移行、モデルとコントローラを作成する必要があります。
php artisan make:model User -m -c
php artisan make:model Post -m -c
今度は、移行を定義してみましょう。
ユーザー
Schema::create('users', function (Blueprint $table) {
$table->increments('id'); $table->string('username'); $table->string('email')->unique(); $table->string('password'); $table->rememberToken(); $table->timestamps(); });
役職
Schema::create('posts', function (Blueprint $table) {
$table->increments('id'); $table->string('title'); $table->text('deatils'); $table->integer('user_id'); $table->integer('flag'); $table->timestamps(); });
一度、あなたは今、マイグレーションを実行し、この部分を行っています。
php artisan migrate
すべてが順調に進めば、あなたはあなたのデータベースと呼ばれるユーザーと投稿で2つのテーブルを参照します。今すぐあなたのテーブルにデータを記録することができます。あなたは、データを播種のために行くか、手動で追加することができます。このチュートリアルでショーを保つために、私は、このステップをスキップします。
ポリシーを作成します。
ポリシーを定義するための理想的な方法は、モデル名に従うことです。私たちのポリシー名は編集または削除するには許可されたユーザにPostPolicyになるよう私たちのケースでは、我々のモデル名は、ポストです。それをする職人コマンドは -
php artisan make:policy PostPolicy
このコマンドは、 make:policy
アプリケーションの\ポリシー]フォルダに空のポリシークラスを生成します。また、サフィックスができ --model=Post
CRUDを作成します。
ポリシーを書きます
さて、ポストIDは、IDのユーザーに属している1だから1ですが、ポストは任意のユーザーや訪問者から見ることが可能ですポストのための政策を書いてみましょう、しかし、更新または削除するために、次のものが必要IDはユーザーであることは1です。
さて、質量人々から更新オプションを制限するためにupdateメソッドを定義します。
<?php
namespace App\Policies;
use App\User; use App\Post; use Illuminate\Auth\Access\HandlesAuthorization; class PostPolicy { use HandlesAuthorization; /** * Determine if the given post can be updated by the user. * * @param \App\User $user * @param \App\Post $post * @return bool */ public function update(User $user, Post $post) { return $user->id === $post->user_id; } }
この更新方法は、ポストの作成者がこのユーザーであるかどうかをチェックします。それはそうと一致したら、それはfalseを返し、trueを返します。
ポリシーを登録します。
ポリシーを定義したら、アプリ/プロバイダ/ AuthServiceProviderにポリシーを登録する必要があります。
<?php
namespace App\Providers;
use App\Post; use App\Policies\PostPolicy; use Illuminate\Support\Facades\Gate; use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; class AuthServiceProvider extends ServiceProvider { /** * The policy mappings for the application. * * @var array */ protected $policies = [ 'App\Model' => 'App\Policies\ModelPolicy', Post::class => PostPolicy::class ]; }
使い方
あなたが意味し、この段階に入ると、あなたは成功し、すべてを行っています。さて、あなたはそれを使用する必要があります。
ストリートビュー
ビューでは、@canと@cannotディレクティブを使用することができます。
@can('update', $post)
<!-- The Current User Can Update The Post -->
@endcan
@cannot('update', $post)
<!-- The Current User Can't Update The Post -->
@endcannot
モデルを介しました
モデルでは、次のway-に使用することができます
if ($user->can('update', $post)) {
//
}
コントローラを介して
でも、あなたはまた、コントローラを介して使用することができます。クールな、右?
public function update(Request $request, Post $post) { $this->authorize('update', $post); // The current user can update the blog post... }
甘い。希望は、あなたはこれを好きになるでしょう。あなたはこれを愛するならば、共有すること自由に感じ。
あなたは、次のリポジトリにこのコードを取得することができます。https://github.com/laravel-school/introduction-laravel-policy
ありがとうございました。