0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravelでロールベースのユーザ管理、ログイン機能、認証機能を追加してみる

Posted at

Laravelは、柔軟で強力な認証機能を提供するPHPフレームワークです。本記事では、Laravelでロールベースのユーザー管理や認証機能を実装する方法を紹介します。

前提条件

  • Laravelの基本的なセットアップが完了していること。
  • Composerがインストールされていること。
  • MySQLまたは他のサポートされているデータベースがセットアップされていること。

以下では、Laravelプロジェクトの作成から始めて、認証機能を構築していきます。


1. Laravelプロジェクトの作成

まず、新しいLaravelプロジェクトを作成します。

composer create-project --prefer-dist laravel/laravel RoleBasedApp
cd RoleBasedApp

2. 認証機能の追加

Laravel Breezeを使用して認証機能を簡単に追加できます。

  1. Breezeをインストールします。

    composer require laravel/breeze --dev
    php artisan breeze:install
    npm install && npm run dev
    php artisan migrate
    
  2. ブラウザで http://localhost:8000/register にアクセスして、登録ページを確認します。


3. Spatie Laravel Permissionの導入

ロールベースのアクセス制御を簡単に構築するために、Spatie Laravel Permissionパッケージを使用します。

  1. パッケージをインストールします。

    composer require spatie/laravel-permission
    
  2. 設定ファイルを公開します。

    php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
    php artisan migrate
    
  3. config/permission.php ファイルが生成されていることを確認します。


4. モデルの設定

ユーザーモデルにロールと権限を紐付けるため、HasRoles トレイトを追加します。

app/Models/User.php を編集します。

use Spatie\Permission\Traits\HasRoles;

class User extends Authenticatable
{
    use HasRoles;
}

5. ロールと権限の設定

ロールや権限を設定し、それをユーザーに割り当てます。

  1. Tinkerを使用してロールと権限を作成

    php artisan tinker
    >>> use Spatie\Permission\Models\Role;
    >>> use Spatie\Permission\Models\Permission;
    >>> $role = Role::create(['name' => 'admin']);
    >>> $permission = Permission::create(['name' => 'edit articles']);
    >>> $role->givePermissionTo($permission);
    >>> $user = User::find(1); // 管理者ユーザーを取得
    >>> $user->assignRole('admin');
    
  2. Gateを利用したアクセス制御

    AuthServiceProvider.php にGateを定義します。

    use Illuminate\Support\Facades\Gate;
    
    public function boot()
    {
        Gate::define('edit-articles', function ($user) {
            return $user->hasPermissionTo('edit articles');
        });
    }
    
  3. Bladeでの利用

    @can('edit-articles')
        <a href="/articles/edit">Edit Article</a>
    @endcan
    

6. ミドルウェアでのロール制御

ルートで特定のロールのみアクセスを許可するには、ミドルウェアを使用します。

  1. ミドルウェアの登録

    app/Http/Kernel.php にミドルウェアを追加します。

    'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
    
  2. ルートの設定

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

まとめ

以上の手順で、Laravelにロールベースのユーザー管理と認証機能を追加できます。Spatie Laravel Permissionを使用することで、柔軟なロールと権限の管理が可能になります。

ぜひ試してみてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?