2017-02-23 8 views
0

私は管理者ログイン用のミドルウェアを持っていますが、私はユーザーが管理者であるかどうかを確認しています。しかし、今私は、管理者がページにアクセスする権限を持っているかどうかをチェックしたい。どうやってやるの?Laravel:各コントローラのアクセス許可を確認します。

私AdminMiddlewareは次のとおりです。

public function handle($request, Closure $next) 
{ 
    if(Auth::check()) 
    { 
     $user = Auth::user(); 
     if($user->user_type=='employee') 
     { 
     return $next($request); 
     } 
     else 
     { 
      return redirect('/'); 
     } 
    } 
    else 
    { 
     return redirect('/'); 
    } 


} 

一つの方法は、それぞれ、すべてのコントローラのすべての機能に次のコードを追加することです。

if(Auth::user()->permission=='manage_employee'){ 
//code here 
} 
else 
{ 
//redirect to access denied page 
} 

しかし、これは正しい方法と時間がかかりません。パッケージを使用しないで他の方法がありますか?

+0

ルートファイルで保護する必要があります.https://laravel.com/docs/5.4/authentication#protecting-routes – Daan

+2

[Gates](https://laravel.com/docs/5.4/)をご覧ください。承認#書き込みゲート)。 – Jerodev

+0

@ Daan私は既にAdmin Middlewareを使用しています。しかし、今私はそれらの管理者のアクセス許可を確認したい。 – mohit

答えて

2

これはあなたのミドルウェアadminはあなたKernel.phpファイルにあなたのミドルウェアの登録名である

Route::get('/your-url', '[email protected]')->middleware('admin'); 

使用する適切な方法である:一部

それを登録するには、あなたが$ routeMiddlewareでこれを挿入する必要が
'admin' => MustBeAdministrator::class, 

あなたは管理者の異なる種類を持っているとのWAN場合は、変数を渡すためにあなたのルートを編集することができます確認してください。

->middleware('admin:employee'); 

、あなたはこのようなあなたのミドルウェアで、この変数を取得することができます:

@paramの文字列$ permition

は、次のコメント@paramの\クロージャー$の下にこれを入力します。

あなたの機能を変更してください:

public function handle($request, Closure $next, $permition) 

if文でpermition変数を使用して、何をしたいのかを実行します。

+0

私はすでに認証のためにミドルウェアグループを使用しています。認証後、認証されたユーザーが特定のページにアクセスする権限を持っているかどうかを確認します。 – mohit

+0

私の回答を編集しました – Onix

関連する問題