به این کار Multiauth گفته میشه و در اجرای پروژه های متوسط و بزرگ خیلی رایجه، بطور مثال شما سرویسی ارائه میدید که کارمندان خودتون هم از اون سرویس استفاده میکنن، و علاوه بر اینکه در نقش کاربر ادمین دسترسی هایی دارند، در نقش کاربر عادی هم از سرویس استفاده میکنن، مثل اسنپ، دیجیکالا و...
در این حالت یه راهکار استفاده از دو جدول Authenticate هست مثلا دو جدول admins و users، پکیج های آماده ای برای این کار وجود داره ولی پیاده کردن این ویژگی در خود لاراول هم پیش بینی شده و کار سختی نیست
ابتدا جدول دوم با نام Admins رو با فیلد های اولیه جدول user ایجاد کنید.
مدل admin رو از Authenticatable بسازید
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admin extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
حالا در فایل config/auth.php گارد جدید ادمین ها رو اضافه کنید
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
]
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
],
],
];
برای کنترل دسترسی های کاربران ادمین متونی همه اون ها رو در یک گروه، با namespace ادمین قرار بدی
Route::prefix('/admin')->name('admin.')->namespace('Admin')->group(function(){
//CODES...
});
حالا هر جا هم خواستی کاربری رو احراز هویت کنی باید گارد مربوط به اون کاربر رو مشخص کنی
مثال
Auth::guard(‘admin’)
سلام
میشه بپرسم دقیقا چرا ؟؟؟
منظورتان این است که مثلا در ورود به پنل ادمین نیاز باشه دوباره یک نام کاربری و رمزی رو بزنه که خیلی مشکلی نداره .
ولی اگر ....
منظورم اینه که چه دلیلی داره که میخواین این کارو کنید؟
اگه هدفتون اینه که بعد از لاگین هر کدوم به یک پنل کاربری هدایت بشن (پنل کاربر و پنل ادمین متفاوت باشن)، بازم کاری که میخواین انجام بدین، اشتباهه.
لطف کنید توضیح کاملی ارائه بدین تا بتونم دقیق تر راهنماییتون کنم.
من درخدمتتون هستم.
به این کار Multiauth گفته میشه و در اجرای پروژه های متوسط و بزرگ خیلی رایجه، بطور مثال شما سرویسی ارائه میدید که کارمندان خودتون هم از اون سرویس استفاده میکنن، و علاوه بر اینکه در نقش کاربر ادمین دسترسی هایی دارند، در نقش کاربر عادی هم از سرویس استفاده میکنن، مثل اسنپ، دیجیکالا و...
در این حالت یه راهکار استفاده از دو جدول Authenticate هست مثلا دو جدول admins و users، پکیج های آماده ای برای این کار وجود داره ولی پیاده کردن این ویژگی در خود لاراول هم پیش بینی شده و کار سختی نیست
ابتدا جدول دوم با نام Admins رو با فیلد های اولیه جدول user ایجاد کنید.
مدل admin رو از Authenticatable بسازید
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class Admin extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
حالا در فایل config/auth.php گارد جدید ادمین ها رو اضافه کنید
<?php
return [
'defaults' => [
'guard' => 'web',
'passwords' => 'users',
],
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'session',
'provider' => 'admins',
]
],
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App\Admin::class,
]
// 'users' => [
// 'driver' => 'database',
// 'table' => 'users',
// ],
],
'passwords' => [
'users' => [
'provider' => 'users',
'table' => 'password_resets',
'expire' => 60,
],
'admins' => [
'provider' => 'admins',
'table' => 'password_resets',
'expire' => 60,
],
],
];
برای کنترل دسترسی های کاربران ادمین متونی همه اون ها رو در یک گروه، با namespace ادمین قرار بدی
Route::prefix('/admin')->name('admin.')->namespace('Admin')->group(function(){
//CODES...
});
حالا هر جا هم خواستی کاربری رو احراز هویت کنی باید گارد مربوط به اون کاربر رو مشخص کنی
مثال
Auth::guard(‘admin’)
خوب مشکل کجاست دوتا route ایجاد می کنید مثلا به نام های:
/login
/admin/login
برای هرکدوم یک view درست می کنید و لاگین می کنید اما با این تفاوت که در هنگام چک کردن برای روت ادمین باید ادمین بودن کاربر ( براساس permission) چک بشه
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟