ゲートを用いたLaraVel 8における簡単な役割ベース認可の実装


Laravel 8でシンプルなロールベースの認証システムを設定する方法を見てみましょう.
このチュートリアルでは、単一のロールベースのシステムを設定しますが、複数のロールベースのものに拡張できます.同様に、データベースの代わりに配列からロールとパーミッションを取得します.ゲートを使用して認証を実装します.
私は将来的に、より高度なバージョンをカバーする予定ですが、私は信じて、概念を理解することは、それが簡素化され、ポイントに簡単です.私はこの記事を読む前にララベル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