2017-01-26 9 views
1

ロールを持っているユーザーにのみ許可するミドルウェアを作成しましたclient しかし、ミドルウェアを使用すると、クライアントの役割を持たないルートにユーザーがアクセスできるようになります。Laravelミドルウェアがルートアクセスを制限していない

public function handle($request, Closure $next) 
{ 
    $user = \Auth::user(); 
    if ($user && $user->role = 'client') { 
     return $next($request); 
    } 

    return redirect('home'); 

} 

ここは私のルートです。私はうまく動作する他のミドルウェアと同じことをしました。ただしこれはありません

Route::group(['middleware'=>['auth']],function(){ 

Route::group(['middleware'=>['client']],function(){ 

    Route::get('/index',[ 
'as' => 'index', 
'uses' => '[email protected]', 
]); 
}); 
}); 

ロールがクライアントではない場合、そのルートにアクセスできるようにするべきではありません。

編集私は他のミドルウェアを==で変更したので、上記の質問は解決しました。しかし、以下のミドルウェアは、私の役割がインタビュアーであっても、私がルートにアクセスすることを制限しています。

public function handle($request, Closure $next) 
{ 
    $user = \Auth::user(); 

    if($user && $user->roles == 'interviewer'){ 
     return $next($request); 
    } 
    return redirect('home'); 

} 

は、ここで私はここで作っていますエラーの可能性は何私のルート

Route::group(['middleware'=>['auth','interviewer']],function(){ 

Route::get('/candidates', [ 
'uses' => '[email protected]', 
]); 
}); 

です。インタビュアーミドルウェアで=を使用し、クライアントミドルウェアで==を使用していて、動作していない場合はうまく動作します。

答えて

3

ロールをチェックしているので、この変更:これに

$user->role = 'client' 

$user->role == 'client' 
+0

これは別の問題であり、将来的に新たな問題のために別の質問を作成してください編集した質問@alexeyのmezenin –

+0

を参照してください、それはSOがどのように動作するかです。あなたの新しい問題に関して、あなたはタイプミスをしています、それは 'role'でなければなりませんが、' roles'ではありません。 –

+1

Oh my。それは愚かな間違いでした。ありがとうございました –

3

を私は素晴らしい大会を見つけ今後、このような問題を避けるためにヨーダ条件と呼ばれます。あなたの

if ($user && $user->role = 'client') { 
    return $next($request); 
} 

は、代わりに

$user->role == 'client' 

をやって、あなたが誤って=代わりの==を入力する場合は、このの有用性がある

'client' == $user->role 

を行い、$user->roleは割り当てられません。値client。だから予期せぬ行動を避けることができます。

読むよりおよそTo Yoda or Not to Yoda

+0

PHP 7では、文字列に変数を代入しようとすると、解析エラーが発生し、これが優れたソリューションになりました。条件付きで '='を使うのは間違いです。 – user3158900

関連する問題