Bir kullanıcının bir sayfayı görüntüleyip görüntüleyemeyeceğini belirlemek için bir izin kontrolü yapıyorum. Bu, önce isteğin bazı ara yazılımlardan geçirilmesini içerir.
Sahip olduğum sorun, verileri görünümün kendisine döndürmeden önce ara yazılımda ve denetleyicide aynı veritabanı sorgusunu kopyalıyorum.
İşte kurulumun bir örneği;
- route.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);
- PageUserMiddleware.php (PageUserMiddleware sınıfı)
public function handle($request, Closure $next)
{
//get the page
$pageId = $request->route('id');
//find the page with users
$page = Page::with('users')->where('id', $pageId)->first();
//check if the logged in user exists for the page
if(!$page->users()->wherePivot('user_id', Auth::user()->id)->exists()) {
//redirect them if they don't exist
return redirect()->route('redirectRoute');
}
return $next($request);
}
- PagesController.php
public function view($id)
{
$page = Page::with('users')->where('id', $id)->first();
return view('pages.view', ['page' => $page]);
}
Gördüğünüz gibi Page::with('users')->where('id', $id)->first()
, hem ara yazılımda hem de denetleyicide tekrarlanıyor. Verileri birinden diğerine geçirmem gerekiyor, böylece kopyalamamalıyım.