Sprawdzam uprawnienia użytkownika, aby określić, czy może przeglądać stronę, czy nie. Obejmuje to najpierw przekazanie żądania przez niektóre oprogramowanie pośredniczące.
Problem polega na tym, że powielam to samo zapytanie do bazy danych w oprogramowaniu pośrednim i w kontrolerze przed zwróceniem danych do samego widoku.
Oto przykład konfiguracji;
- tours.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);
- PageUserMiddleware.php (klasa PageUserMiddleware)
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]);
}
Jak widać, Page::with('users')->where('id', $id)->first()
operacja powtarza się zarówno w oprogramowaniu pośrednim, jak i kontrolerze. Muszę przekazywać dane z jednego do drugiego, aby ich nie powielać.