ایجاد سطح دسترسی کاربران در لاراول

ایجاد سطح دسترسی کاربران در لاراول

یکی از بخش های مهم لاراول پیاده سازی نقش کاربران یا همان User Role است که با ایجاد نقش کاربری دسترسی به صفحات آن را محدود کنید.

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

۱. جدول Role برای ستون users ایجاد کنید:

 

php artisan make:migration add_role_column_to_users_table --table=users

 

و کد زیر را وارد کنید:

 

public function up()
{
   Schema::table('users', function (Blueprint $table) {
     $table->string('role')->default('user');
   });
}

 

کد بالا به طور پیش فرض مقدار user در جدول role ایجاد می کند.

 

۲. یک میان افزار (Middleware) با نام IsAdmin ایجاد کنید:

 

php artisan make:middleware IsAdminMiddleware

 

مسیر Middleware لاراول :

 

App > Http > Middleware

 

۳. کد زیر را در فایل IsAdminMiddleware.php وارد کنید:

 

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Request;

class IsAdminMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle(Request $request, Closure $next)
    {
        if(auth()->user()->role !== 'admin'){
            abort(403, 'شما دسترسی لازم برای ورود به این صفحه را ندارید!');
        }
        return $next($request);
    }
}

 

عملکرد کد بالا اینکه در تعریف شرط مثلا admin به همه صفحات مورد نظر دسترسی خواهد داشت در صورتی که کاربر admin باشد و اما اگر کاربر عادی باشد نمی تواند به صفحات آن دسترسی داشته باشد که با خطای 403 رو به رو خواهد شد و مگر اینه شرط مورد نظر کاربر عادی تعریف شده باشد.

 

۴. حالا آدرس زیر را در فایل فایل Kernel.php فراخوانی کنید:

 

'admin' => \App\Http\Middleware\IsAdminMiddleware::class,

 

۵. در مدل User.php نقش کاربران را تعریف کنید:

 

<?php

namespace App\Models;

use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;

class User extends Authenticatable
{
    use HasFactory, Notifiable;

    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name',
        'email',
        'password',
        'role',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password',
        'remember_token',
    ];

    /**
     * The attributes that should be cast to native types.
     *
     * @var array
     */
    protected $casts = [
        'email_verified_at' => 'datetime',
    ];

    public function getRoleInPersian()
    {
        if($this->role === 'user') {
            return 'کاربر عادی';
        }
        if ($this->role === 'author') {
            return 'نویسنده';
        }
        if ($this->role === 'admin') {
            return 'مدیر';
        }
    }
}

 

۶. می توانید Middleware در روت ها در فایل web.php اعمال کنید:

 

Route::middleware(['auth', 'admin'])->prefix('/userarea')->group(function() {
    Route::resource('/users', UserController::class)->except(['show']);
});

 

۷. در آخر شرط های دسترسی کاربر را اعمال کنید:

 

<ul class="listpanel mt-4">
  <li class="mb-3"><a href="{{route('userarea')}}">پیشخوان</a></li>
  @if(auth()->user()->role === 'admin')
    <li class="mb-3"><a href="{{route('users.index')}}">کاربران</a></li>
    <li class="mb-3"><a href="{{route('categories.index')}}">دسته بندی</a></li>
  @endif
  @if(auth()->user()->role === 'admin' || auth()->user()->role === 'author')
    <li class="mb-3"><a href="{{route('posts.index')}}">نوشته ها</a></li>
  @endif
</ul>
پیوند منابع
لاراول (Laravel) نوامبر/14/2021 848
https://rayium.ir/?p=92

دیدگاه شما