Merhabalar,
Bu yazıda Laravel'de middleware kullanarak rol bazlı yetkilendirme işleminin nasıl yapılabileceğinden bahsedeceğim. Daha açık olmak gerekirse bu işlem sayesinde, örneğin Laravel'de bir Rest Api projesi geliştirirken "şu api'ye sadece şu role/rollere sahip kullanıcılar istekte bulunabilsin" diyebileceğiz.
Bu işlemi anlatırken daha önceden Laravel'de Passport kullanımı yazısında oluşturduğum proje üzerinden gideceğim. Bu yüzden eğer okuyup uygulamadıysanız öncelikle o yazıdakileri uygulamanızı tavsiye ederim.
İlk olarak register api'sine bir istekte bulunup kullanıcı kaydı yapıyorum. Sonrasında veritabanında bulunan users tablosuna role adında bir sütun ekliyorum. Ve mevcut kullanıcıma 1 rolünü veriyorum:
app/Http/Middleware klasörünü açarak CheckRole.php adında bir dosya oluşturuyorum ve içeriğini şu şekilde dolduruyorum:
<?php namespace App\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; class CheckRole { public function handle($request, Closure $next, $roles) { $user = Auth::user(); $need_roles = explode('|', $roles); if (in_array($user->role, $need_roles)) { return $next($request); } return response()->json(['message' => 'Yetkisiz giriş'], 401); } }
Burada yapmış olduğumuz işlem şunu ifade ediyor; giriş yapan kullanıcının rol bilgisi istenilen rollerden birine sahipse işleme devam et, değilse 'Yetkisiz giriş' şeklinde hata mesajı döndür.
Oluşturduğumuz middleware'ı app/Http/Kernel.php dosyasının routeMiddleware kısmında tanımlıyoruz:
'roles' => \App\Http\Middleware\CheckRole::class
api.php dosyasını açarak deneme api'sine middleware'ı ekliyoruz:
Route::group(['middleware' => 'auth:api'], function () { Route::get('deneme', 'UserController@deneme')->middleware('roles:1|2'); });
Artık deneme api'sine sadece 1 veya 2 rolündeki kullanıcılar istekte bulunabilecek. Postman üzerinden deneyerek sonucu görebilirsiniz.
İyi çalışmalar.
Yorumlar Henüz yorum yapılmamış
Yeni Yorum