사용자가 페이지를 볼 수 있는지 여부를 확인하기 위해 권한 검사를 수행하고 있습니다. 여기에는 먼저 미들웨어를 통해 요청을 전달하는 것이 포함됩니다.
내가 가진 문제는 데이터를 뷰 자체에 반환하기 전에 미들웨어와 컨트롤러에서 동일한 데이터베이스 쿼리를 복제하고 있다는 것입니다.
다음은 설정의 예입니다.
-route.php
Route::get('pages/{id}', [
'as' => 'pages',
'middleware' => 'pageUser'
'uses' => 'PagesController@view'
]);
-PageUserMiddleware.php (클래스 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]);
}
보시다시피 Page::with('users')->where('id', $id)->first()
미들웨어와 컨트롤러 모두에서 반복됩니다. 중복되지 않도록 데이터를 하나에서 다른 것으로 전달해야합니다.