جشنواره بهارانه راکت! ۳۵% تخفیف ویژه بر روی دورههای آموزشی
مشاهده دورههادرود خوبی ..
۱. جدول 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>
پیوند زیر:
https://yun.ir/mvze48
سلام خسته نباشید
بهترین پکیج برای مقام و دسترسی
https://spatie.be/docs/laravel-permission/v5/introduction
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟