دوره آموزشی

دوره آموزشی ۱۰۰ پروژه جاوا اسکریپت + پروژه محور
مبتدی تا پیشرفته در حال ضبط

دوره آموزشی ۱۰۰ پروژه جاوا اسکریپت + پروژه محور

00:00:00
0 دانشجو
رایگان
مشاهده دوره
آموزش پروژه محور ساخت فروشگاه فایل دانلودی با لاراول ۱۳
پیشرفته در حال ضبط

آموزش پروژه محور ساخت فروشگاه فایل دانلودی با لاراول ۱۳

00:38:53
0 دانشجو
1,499,000 تومان
مشاهده دوره
40 تخفیف آموزش حرفه ای طراحی قالب شرکتی بر پایه وردپرس
سطح متوسط تکمیل دوره

آموزش حرفه ای طراحی قالب شرکتی بر پایه وردپرس

08:32:53
3 دانشجو
999,000 599,000 تومان
مشاهده دوره
آموزش حرفه ای طراحی قالب فروشگاهی بر پایه ووکامرس
پیشرفته تکمیل دوره

آموزش حرفه ای طراحی قالب فروشگاهی بر پایه ووکامرس

12:09:12
7 دانشجو
1,499,000 تومان
مشاهده دوره

وبلاگ

ایجاد احراز هویت ساده مبتنی بر نقش کاربری در لاراول

4 دقیقه

ایجاد احراز هویت ساده مبتنی بر نقش کاربری در لاراول

در این پست می خواهیم در احراز هویت دو روش سطح دسترسی برای لاراول آموزش دهیم و نیازی به استفاده پکیچ های دسترسی لاراول نیست.

ایجاد نقش های تکی (Single roles)

دستور ایجاد جدول زیر :

php artisan make:migration add_role_column_to_users_table --table=users

کد زیر:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::table('user', function (Blueprint $table) {
            $table->string('role')->nullable();
        });
    }

    public function down()
    {
        Schema::table('user', function (Blueprint $table) {
            $table->dropColumn('role');
        });
    }
}

میدولور (Middleware)

با دستور زیر فایل EnsureUserHasRole را ایجاد کنید:

php artisan make:middleware EnsureUserHasRole

کد زیر:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class EnsureUserHasRole
{
    public function handle(Request $request, Closure $next, string $role)
    {
        if ($request->user()->role === $role) {
            return $next($request);
        }

        abort(403);
    }
}

نکته: هر زمان که با یک شی Request سر و کار دارید، می توانید بدون استفاده از Auth یا کمک کننده auth()->user() کاربر احراز هویت شده را دریافت کنید. فقط $request->user() را فراخوانی کنید و کاربر احراز هویت شده را برمی گرداند. شما می توانید این کار را در کنترلرها نیز انجام دهید.

ثبت در میدولور

کد زیر در مسیر فایل app/Http/Kernel.php وارد کنید:

protected $routeMiddleware = [
    'role' => \App\Http\Middleware\EnsureUserHasRole::class,
    // Other route middleware...
];

در مسیر روت زیر می توانید به صورت زیر دسترسی را تعریف کنید:

Route::middleware(['auth', 'role:admin'])->group(function () {
    // User is authentication and has admin role
});

ایجاد نقش های متعدد (Multiple roles)

با دستور زیر جدول و مدل Role را ایجاد کنید:

php artisan make:model Role -m

کد زیر برای جدول Role :

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('roles', function (Blueprint $table) {
            $table->id();
            $table->string('name')->unique();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('roles');
    }
}

یک جدول دیگر با نامک role_user ایجاد کنید:

php artisan make:migration create_role_user_table --create=role_user

کد زیر:

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {
        Schema::create('role_user', function (Blueprint $table) {
            $table->primary(['role_id', 'user_id']);
            $table->foreignId('role_id')->constrained()->cascadeOnDelete();
            $table->foreignId('user_id')->constrained()->cascadeOnDelete();
        });
    }

    public function down()
    {
        Schema::dropIfExists('role_user');
    }
}

در مدل های Role و User رابطه belongsToMany تعریف کنید:

مدل Role

class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany(User::class);
    }
}

مدل User

class User extends Authenticatable
{
    public function roles()
    {
        return $this->belongsToMany(Role::class);
    }
}

تعریف میدولور (Middleware)

کد زیر :

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class EnsureUserHasRole
{
    public function handle(Request $request, Closure $next, string $role)
    {
        if ($request->user()->roles()->where('name', '=', $role)->exists()) {
            return $next($request);
        }

        abort(403);
    }
}

در مسیر Route میدولور آن role:foo تعریف می شود و یعنی هر عنوان برای نقش کاربری تعریف کردید که به عنوان مثال author به صورت role:author تعریف می کنید.

پیوند منابع
لاراول (Laravel) نوامبر/12/2024 1299 بدون دیدگاه
154 
نظرات

دیدگاه شما


© راییوم 05-1402 تمامی حقوق محفوظ است.
قدرت گرفته از وردپرس و طراحی شده با فریم ورک Tani