Merhabalar;
Bazı arkadaşların konu ile ilgili sordukları soruları görünce basit bir örnek hazırlamak istedim. İhtiyacınıza göre örnek üzerinden geliştirebilirsiniz.
Öncelikle users tablomuza tipi belirteceğimiz enum tipinde alanımızı ekliyoruz,
Users migrasyon dosyanız
Schema::create('users', function (Blueprint $table) {
$table->enum('type', ['Admin', 'User']);
});
User.php model dosyamızda alanımızı belirtiyoruz,
protected $fillable = [
'type',
];
Sonrasında LoginController dosyamızda
protected $redirectTo = RouteServiceProvider::HOME;
tanımlamamızı aşağıdaki gibi güncelliyoruz,
public function redirectTo()
{
$type = Auth::user()->type;
switch ($type) {
case 'Admin':
return 'admin';
break;
case 'User':
return 'users';
break;
}
}
Daha sonra giriş yapmış kullanıcıyı doğru bir şekilde yönlendirme için RedirectIfAuthenticated middleware'ını aşağıdaki gibi güncelliyoruz,
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
return redirect(RouteServiceProvider::HOME);
}
}
değişiklik sonrasındaki yapı aşağıdaki olacak,
foreach ($guards as $guard) {
if (Auth::guard($guard)->check()) {
$type = Auth::user()->type;
switch ($type) {
case 'Admin':
return redirect()->route('admin.home');
break;
case 'User':
return redirect()->route('user.home');
break;
}
}
isAdmin ve isUser isminde iki adet middleware oluşturuyoruz;
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class IsAdmin
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$response = $next($request);
if (Auth::check() && Auth::user()->type != 'Admin') {
Auth::logout();
return redirect('/login')->withErrors('YETKİSİZ GİRİŞ DENEMESİ!');
}
return $response;
}
}
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
class IsUser
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle(Request $request, Closure $next)
{
$response = $next($request);
if (Auth::check() && Auth::user()->type != 'User') {
Auth::logout();
return redirect('/login')->withErrors('YETKİSİZ GİRİŞ DENEMESİ!');
}
return $response;
}
}
Oluşturduğumuz bu middelware'ları Kernel 'de routeMiddleware içerisine ekliyoruz,
protected $routeMiddleware = [
'is_admin' => \App\Http\Middleware\IsAdmin::class,
'is_user' => \App\Http\Middleware\IsUser::class,
];
Artık rotalarımızı oluşturduğumuz tiplere göre gruplayıp kullanabiliriz.
/*Admin Start*/
Route::group(['middleware' => ['is_admin']], function () {
Route::group(['prefix' => 'admin'], function () {
Route::get('/', [App\Http\Controllers\Admin\HomeController::class, 'index'])->name('admin.home');
});
});
/*Admin End*/
/*User Start*/
Route::group(['middleware' => ['is_user']], function () {
Route::group(['prefix' => 'user'], function () {
Route::get('/', [App\Http\Controllers\User\HomeController::class, 'index'])->name('user.home');
});
});
/*User End*/
Yapı daha da geliştirilebilir.
Saygı ve Sevgilerimle.