2017-12-28 54 views
5

laravel multi authの代わりに、独自の(プリミティブ)メソッドを使用して管理ユーザーを使用しています。カスタム管理テーブルを使用して管理ページにリダイレクトする方法

PAdminという名前のデータベースに余分なテーブルがあります。このテーブルには、管理ユーザーのIDがあります。

アプリケーションにログインすると、adminユーザーをhomeページの代わりに別のページにリダイレクトします。そのため

は、私は、HTTP \ミドルウェア\ RedirectIfAuthenticatedに行ってきましたし、これからので、コードを変更:

public function handle($request, Closure $next, $guard = null) 
{ 

    if (Auth::guard($guard)->check()) { 
    return redirect('/home'); 

} 

return $next($request); 


} 

私はこれにそれを変更:

public function handle($request, Closure $next, $guard = null) 
{ 

    $user_id = Auth::id(); 


    $isAdmin = PAdmin::where('user_id',$user_id)->get()->isEmpty();//returns 'true' if empty 

    if (Auth::guard($guard)->check() && $isAdmin) {//IF $isAdmin is TRUE it means that the user is not admin 

     return redirect('/home'); 
    }elseif (Auth::guard($guard)->check() && !($isAdmin)){//IF $isAdmin is FALSE it means that the user is not admin 

     return redirect('/admin'); 
    } 

    return $next($request); 
} 

考え方は単純です - 場合PAdminテーブルのユーザIDが$isAdminのレコードが偽となり、elseifが実行されます。

残念ながら、これは動作していません。理由はわかりません。

これはまったく正しい方法ではないかもしれません。

誰かが私にこの権利を手伝うことができますか?

P.S.私はmulti authを使いたくありません。

+0

- > get()データを最初に確認してください。 – jjwdesign

+0

あなたは本当にこれを変更する必要があります "$ isAdminがTRUEならば、ユーザーがadminではないことを意味します" –

答えて

3
public function handle($request, Closure $next, $guard = null) 
{ 

    if (Auth::guard($guard)->check()) { 
    if(PAdmin::where('user_id',Auth::id())->first() != null) return redirect('/admin'); 
    return redirect('/home'); 

} 

return $next($request); 


} 

さらに明確で簡単です。

関連する問題