Fuxien wrote:MURATSPLAT wrote:Bu soruyu soran biri için önce MVC öğrenemlisiniz derim. Laravel, MVC mimarisi üzerine kurulmuştur. Performans sorunu konusunda endişeniz var ise Laravel'e hakim değilsinizdir. Zira Modeller cachenebilir. Hemen hemen her türlü veri cachlenebilir. Modelleri ve ilişikileri kullanırken n+1 sorununa dikkat ederseniz, performans sorunu yaşamanız olası değildir. Zira laravel sık karşılaşılan sorunlar için yollar sunar.
routes.php 'de sadece yollar olur. Bir sınıf çağırmak ya da ya da sınıf tanımı yapılmaz. Sadece yollar olmalıdır. Yok ben bildiğimi yaparım derseniz, projeniz gelişitirilemez bir hale gelir. Kodlarkende bir şey de öğrenemezsiniz.
Github'da bir çok örnek var bu konu hakkında. Bazı eklentilerde var. En ünlüsü Sentry'dir.
Şu eklentilerin kodlarını inceleyerek yetkilendirme, filtreleme hakkında fikir sahibi olabilirsiniz.
https://github.com/machuga/authority
https://github.com/Zizaco/entrust
Murat hocam MVC yapısına yabancı olduğumu söyleyemem. Laravele yabancı olduğum bir gerçek. Laravelde ki rota mantığının arka planını anlamaya çalışıyorum. Ben laravel konusunda bilgi sahibi biri olsaydım buraya soru sormama gerek kalmazdı heralde

.
Sergin hocam verdiin kaynaklar için teşekkür ederim.
Bu gözler tüm uygulamayı routes.php içinde yapılmış projeler gördü. Genellikle yapılan hatadır bu. O nedenle hep o tür projeler geliyor aklıma. Yapmayın etmeyin diye tavsilerde bulanma ihtiyacı duyuyorum. Zira sizin yazıldığınız bir proje döner dolaşır başka bir yazılımcının kabusu olur. O yüzden sürdürülebilir projeler için tavsiye edilen yolları hatırlatmak lazım
Laravel'de genellikle grupları ve bu grupların sahip olduğu erişim verileri modellerde tutulur. Çoğu örnek böyle.. routes.php içine filteler ekyerek yollar üzerinden kontrol sağlanır. Ben genellikle Denetleyiciler üzerine erişimi kuruyorum. Yol isimleriyle uğraşmak zorunda kalmıyorsunuz, çünkü tek referans -atıyorum- AController'da bulunan bilmem ne methodun ismi oluyor..
Örnek:
/**
* hasAcces filter (permissions)
*
* Check if the user has permission (group/user)
*/
Route::filter('hasAccess', function($route, $request)
{
//var_dump($route->getActionName());
try
{
$user = Sentry::getUser();
if( ! $user->hasAccess($route->getActionName())) { // kulanıcının ''Foo/Bar/ProductController@destroy' için izni var mı?
// for ajax request
if ($request->ajax()) {
return \Response::json(['status' => false, 'login' => false]);
}
return Response::view('Muratsplat\mvc\view\flash::unauthorized', array('flash' => Lang::get('messages.unauthorized_long')), 401);
}
}
catch (Cartalyst\Sentry\Users\UserNotFoundException $e)
{
// for ajax request
if ($request->ajax()) {
return \Response::json(['status' => false, 'login' => false]);
}
return Redirect::action('Muratsplat\mvc\controller\front\UserLoginController@getLogin');
}
});
Bu örnekteki "hasAccess" filtresini istenilen yola eklenebilir. L5'de filreler MiddleWare class şeklinde yazılıyor. Tek fark bu..
Yazılımda bir çok yol vardır. Bu da yollardan biri..