ホームページ >PHPフレームワーク >Laravel >laravelのインストール権限管理

laravelのインストール権限管理

WBOY
WBOYオリジナル
2023-05-26 14:27:371549ブラウズ

Laravel は非常に人気のある PHP 開発フレームワークであり、開発効率を大幅に向上させる便利なツールやコンポーネントが多数提供されています。アプリケーションの開発プロセスでは、多くの場合、ユーザー権限の管理が必要になります。 Laravel は、パーミッション制御を迅速かつ安全に実装するのに役立つ非常に便利なパーミッション管理機能を提供します。

この記事では、次の観点から Laravel 権限管理のインストールと構成を紹介します:

  1. Laravel 権限管理コンポーネントのインストール
  2. データベース移行
  3. ユーザー認証
  4. ロールと権限の管理
  5. ミドルウェア
  6. ルーティング保護

1. Laravel 権限管理コンポーネントをインストールします

Laravel では、composer を介して spatie/laravel-permission コンポーネントをインストールし、権限管理機能を実装できます。プロジェクトのルート ディレクトリで次のコマンドを実行して、このコンポーネントをインストールできます:

composer require spatie/laravel-permission

インストールが完了したら、このコンポーネントのサービス プロバイダーを config/app.php ファイルに追加する必要があります。

'providers' => [
    // ...
    SpatiePermissionPermissionServiceProvider::class,
],

同時に、このコンポーネントのファサードを同じファイルに追加します:

'aliases' => [
    // ...
    'Permission' => SpatiePermissionFacadesPermission::class,
    'Role' => SpatiePermissionFacadesRole::class,
],

2. データベースの移行

コンポーネントをインストールした後、データベースを実行する必要があります。権限関連のテーブルを作成するための移行。職人コマンドを使用してデータベース移行ファイルを生成できます:

php artisan make:migration create_permission_tables

次に、生成された移行ファイルを開いて次のコードを追加します:

class CreatePermissionTables extends Migration
{
    public function up()
    {
        Schema::create('permissions', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('guard_name');
            $table->timestamps();
        });

        Schema::create('roles', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');
            $table->string('guard_name');
            $table->timestamps();
        });

        Schema::create('model_has_roles', function (Blueprint $table) {
            $table->integer('role_id')->unsigned();
            $table->morphs('model');
            $table->string('model_type')->nullable();
            $table->string('guard_name');
            $table->foreign('role_id')->references('id')->on('roles')
                  ->onDelete('cascade');
            $table->primary(['role_id', 'model_id', 'model_type']);
        });

        Schema::create('model_has_permissions', function (Blueprint $table) {
            $table->integer('permission_id')->unsigned();
            $table->morphs('model');
            $table->string('model_type')->nullable();
            $table->string('guard_name');
            $table->foreign('permission_id')->references('id')->on('permissions')
                  ->onDelete('cascade');
            $table->primary(['permission_id', 'model_id', 'model_type']);
        });

        Schema::create('role_has_permissions', function (Blueprint $table) {
            $table->integer('permission_id')->unsigned();
            $table->integer('role_id')->unsigned();
            $table->string('guard_name');
            $table->foreign('permission_id')->references('id')->on('permissions')
                  ->onDelete('cascade');
            $table->foreign('role_id')->references('id')->on('roles')
                  ->onDelete('cascade');
            $table->primary(['permission_id', 'role_id']);
        });
    }

    public function down()
    {
        Schema::dropIfExists('permissions');
        Schema::dropIfExists('roles');
        Schema::dropIfExists('model_has_roles');
        Schema::dropIfExists('model_has_permissions');
        Schema::dropIfExists('role_has_permissions');
    }
}

その後、移行コマンドを実行できます:

php artisan migrate

このようにして、データベース内に関連テーブルが作成されます。

3. ユーザー認証

次に、アプリケーションにユーザー認証機能を実装する必要があります。 Laravel は非常に便利なユーザー認証システムを提供しており、次のコマンドを実行するだけで済みます:

php artisan make:auth

このコマンドにより、ユーザーのログイン、登録、パスワード変更などの機能を含むページが生成されます。これらの操作を通じてユーザーを作成および管理できます。

4. ロールとパーミッションの管理

Laravel パーミッション管理では、ロールとパーミッションは非常に重要な概念です。ロールと権限を通じてユーザーのアクセス制御ルールを定義できます。

  1. ロールの作成

Role ファサードを使用してロールを作成できます。例:

use SpatiePermissionModelsRole;

$role = Role::create(['name' => 'admin']);

上記のコードは、「admin」という名前のロールを作成します。

  1. アクセス許可の作成

同様に、アクセス許可ファサードを使用してアクセス許可を作成できます:

use SpatiePermissionModelsPermission;

$permission = Permission::create(['name' => 'create posts']);

上記のコードは、「create post」というファイルを作成します。 "許可。

  1. ロールへのアクセス許可の付与

ロールとアクセス許可を取得したので、ロールにアクセス許可を付与する必要もあります。これは、ロールの givePermissionTo メソッドを使用して行うことができます。

$role = Role::findByName('admin');
$permission = Permission::findByName('create posts');
$role->givePermissionTo($permission);
  1. ユーザーがアクセス許可を持っているかどうかを確認します

ロールとアクセス許可が定義されたので、次のことができます。 Laravel のアクセス許可管理が提供するメソッドを使用して、ユーザーがアクセス許可を持っているかどうかを確認します。例:

$user->can('create posts');

上記のコードは、現在のユーザーが「投稿の作成」権限を持っているかどうかを示すブール値を返します。

  1. ユーザーがロールを持っているかどうかを確認する

同様に、hasRole メソッドを使用して、ユーザーが特定のロールを持っているかどうかを確認することもできます。例:

$user->hasRole('admin');

上記のコードは、現在のユーザーが「管理者」ロールを持っているかどうかを示すブール値を返します。

5. ミドルウェア

Laravel のミドルウェアを使用してルートとコントローラーを保護し、権限制御を実現できます。サンプル コードは次のとおりです:

Route::group([
    'middleware' => ['role:admin'],
], function () {
    Route::get('/admin', function () {
        //
    });
});

Route::group([
    'middleware' => ['permission:create posts'],
], function () {
    Route::get('/new-post', function () {
        //
    });
});

上記のコードは、「/admin」ルートと「/new-post」ルートを保護し、「admin」ロールと「投稿の作成」権限を持つユーザーのみにアクセスを許可します。 。

6. ルートの保護

最後に、ルートとコントローラーを保護する必要があります。これを実現するには、can メソッドと authorize メソッドを使用できます。

public function store(Request $request)
{
    $this->authorize('create', Post::class);

    // ...
}

public function edit(Request $request, Post $post)
{
    if (! $request->user()->can('edit', $post)) {
        abort(403);
    }

    // ...
}

上記のコードは、ストアおよび編集メソッドを保護し、「作成」および「編集」権限を持つユーザーのみにアクセスを許可します。

概要

一般的に、Laravel の権限管理は非常に便利で安全です。 spatie/laravel-permission コンポーネントをインストールすることで権限制御を実装し、Laravel が提供する多くのメソッドと関数を使用してロールと権限を管理できます。ミドルウェアとルート保護を通じて、アプリケーションを簡単に保護し、ユーザーのアクセスを制限できます。

以上がlaravelのインストール権限管理の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。