ゲートを用いたLaraVel 8における簡単な役割ベース認可の実装
Laravel 8でシンプルなロールベースの認証システムを設定する方法を見てみましょう.
このチュートリアルでは、単一のロールベースのシステムを設定しますが、複数のロールベースのものに拡張できます.同様に、データベースの代わりに配列からロールとパーミッションを取得します.ゲートを使用して認証を実装します.
私は将来的に、より高度なバージョンをカバーする予定ですが、私は信じて、概念を理解することは、それが簡素化され、ポイントに簡単です.私はこの記事を読む前にララベル8認可のドキュメントを通過することをお勧めします.
すべてのソースを表示できますmy GitHub repo , デモのために少し変更されます.
我々のアプリケーションについて
説明するために、私は3つの役割-管理者、マネージャーと顧客とアプリケーションを作成するでしょう.そして、私たちの権限は、製品の周りに基づいて作成され、更新、表示、削除されます.管理者と管理者がすべての許可を持っている間、顧客は見ることができるだけであるべきです.
始める
一度インストールしてララベルを設定します.を使用して認証を足場にします
あなたは他の認証の足場に慣れているし、それに応じて調整することができます.
移行へのロールの追加
開放する
scaffoldedスキーマを変更し、文字列を格納するロール列を設定し、既定値として' Customer 'を持ちます.
認証メカニズムの設定
オープン
ゲートの設定
boot ()関数をロジックで変更します.
次に、パーミッションの配列をループし、それぞれのゲートを定義します.ここで、ユーザーのロールがアクションに関連付けられたロールにあるかどうかを確認します.
基本的にゲートにパーミッション配列をマップしました.
認証システムの使用
すべてのセットで、我々は今、システムを使用することができます.
コントローラ内
を使用して
我々のモデルで
を使用して
我々の見解で
を使用して
モデル経由で
を使用して
経由ミドルウェア
使用によって
それで
この記事は、あなたが認可システムをどのように作成するかについての一般的な考えを与えなければなりませんでした.これは基本的な、あなたが追加することができます&あなたが必要な機能をサポートするための実装を改善します.
あなたが読んだものが好き?ここで私をサポートしてください.https://www.buymeacoffee.com/zaxwebs
このチュートリアルでは、単一のロールベースのシステムを設定しますが、複数のロールベースのものに拡張できます.同様に、データベースの代わりに配列からロールとパーミッションを取得します.ゲートを使用して認証を実装します.
私は将来的に、より高度なバージョンをカバーする予定ですが、私は信じて、概念を理解することは、それが簡素化され、ポイントに簡単です.私はこの記事を読む前にララベル8認可のドキュメントを通過することをお勧めします.
すべてのソースを表示できますmy GitHub repo , デモのために少し変更されます.
我々のアプリケーションについて
説明するために、私は3つの役割-管理者、マネージャーと顧客とアプリケーションを作成するでしょう.そして、私たちの権限は、製品の周りに基づいて作成され、更新、表示、削除されます.管理者と管理者がすべての許可を持っている間、顧客は見ることができるだけであるべきです.
始める
一度インストールしてララベルを設定します.を使用して認証を足場にします
PHP artisan ui bootstrap --auth
コマンドnpm install
& npm run dev
.あなたは他の認証の足場に慣れているし、それに応じて調整することができます.
移行へのロールの追加
開放する
create_users_table_table
マイグレーションファイルdatabase/migrations
.scaffoldedスキーマを変更し、文字列を格納するロール列を設定し、既定値として' Customer 'を持ちます.
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('role')->default('customer');
$table->string('password');
$table->rememberToken();
$table->timestamps();
});
}
認証メカニズムの設定
オープン
AuthServiceProvider
内部app/Providers
. 内部のクラスにパーミッション配列を追加しましょう.public static $permissions = [
'index-product' => ['manager', 'customer'],
'show-product' => ['manager', 'customer'],
'create-product' => ['manager'],
'store-product' => ['manager'],
'edit-product' => ['manager'],
'update-product' => ['manager'],
'destroy-product' => ['manager'],
];
何が起こっているのですか.これは$action => $roles[]
.ゲートの設定
boot ()関数をロジックで変更します.
public function boot()
{
$this->registerPolicies();
// Roles based authorization
Gate::before(
function ($user, $ability) {
if ($user->role === 'admin') {
return true;
}
}
);
foreach (self::$permissions as $action=> $roles) {
Gate::define(
$action,
function (User $user) use ($roles) {
if (in_array($user->role, $roles)) {
return true;
}
}
);
}
}
ここではGates:before()
我々は、復帰によってすべての能力に管理者アクセスを許しますtrue
ユーザ役割が管理者であるならば.次に、パーミッションの配列をループし、それぞれのゲートを定義します.ここで、ユーザーのロールがアクションに関連付けられたロールにあるかどうかを確認します.
基本的にゲートにパーミッション配列をマップしました.
認証システムの使用
すべてのセットで、我々は今、システムを使用することができます.
コントローラ内
を使用して
authorize()
メソッド.$this->authorize('update-product');
我々のモデルで
を使用して
can()
メソッド.$this->can('update-product');
我々の見解で
を使用して
@can
ブレード指示方法.@can('update-product')
//
@endcan
モデル経由で
を使用して
can()
メソッド.if ($user->can('update-product')) {
//
}
経由ミドルウェア
使用によって
can:action-name
ミドルウェアRoute::put('/product/{Product}', [PostController::class, 'update'])->middleware('can:update-post');
それで
この記事は、あなたが認可システムをどのように作成するかについての一般的な考えを与えなければなりませんでした.これは基本的な、あなたが追加することができます&あなたが必要な機能をサポートするための実装を改善します.
あなたが読んだものが好き?ここで私をサポートしてください.https://www.buymeacoffee.com/zaxwebs
Reference
この問題について(ゲートを用いたLaraVel 8における簡単な役割ベース認可の実装), 我々は、より多くの情報をここで見つけました https://dev.to/zaxwebs/implementing-simple-role-based-authorization-in-laravel-8-using-gates-1n44テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol