2017-04-06 12 views
0

私は3人のユーザー(「スーパー管理者」、「支店管理者」、「ユーザー」)を作成しています。スーパー管理者が他の2人のユーザーのダッシュボードユーザー( '支店管理者、ユーザー')にログインしていないときに、その作業を実行しようとしています。しかし、「多すぎるリダイレクト」のページを表示し、ブラウザで他のユーザーのURLを指定すると、ダッシュボードを独自のダッシュボードからリダイレクトします。他の2人のユーザーと同じように?どのようにlaravelを使用してミドルウェアを管理するには?

ルート:

Route::group(['middleware' => [ 'auth', 'isNotAdmin']], function(){ 
     Route::get('/profile','[email protected]'); 
    }); 

    Route::group(['middleware' => [ 'auth', 'isBranchAdmin']], function(){ 
     Route::get('/branch','[email protected]'); 
    }); 

    Route::group(['middleware' => [ 'auth', 'isAdmin']], function(){ 
    Route::get('/Super/admin', '[email protected]'); 
     }); 

ビュー:

<div class="col-xs-12 col-sm-12 col-md-3 col-lg-3"> 
    @if(Auth::check() && Auth::user()->type === 'User') 
     <ul class="nav nav-pills nav-stacked"> 
      <li role="presentation" class="active"> 
       <a id="bootstrap-overrides" href="/home"> 
        Home 
       </a> 
      </li> 
      <li role="presentation"> 
       <a id="bootstrap-overrides" href="/contact"> 
        Contact 
       </a> 
      </li> 
      <li role="presentation"> 
       <a id="bootstrap-overrides" href="/about"> 
        About 
       </a> 
      </li> 
      <li role="presentation"> 
       <a id="bootstrap-overrides" href="/blog"> 
        Blog 
       </a> 
      </li> 
      <li role="presentation"> 
       <a id="bootstrap-overrides" href="/faqs"> 
        FAQs 
       </a> 
      </li> 
     </ul> 
    @elseif(Auth::check() && Auth::user()->type === 'Admin') 
     <ul class="nav nav-pills nav-stacked"> 
      <li role="presentation" @if(Request::path() === 'companies') class="active" @endif> 
       <a href="/companies"> 
        Companies 
       </a> 
      </li> 
      <li role="presentation" @if(Request::path() === 'branchies') class="active" @endif> 
       <a href="/branchies"> 
        Branchies 
       </a> 
      </li> 
     </ul> 
    @elseif(Auth::check() && Auth::user()->type === 'BranchAdmin') 
     <ul class="nav nav-pills nav-stacked"> 
      <li role="presentation" @if(Request::path() === 'medicines') class="active" @endif> 
       <a href="/medicines"> 
        Medicines 
       </a> 
      </li> 
      <li role="presentation" @if(Request::path() === 'stock') class="active" @endif> 
       <a href="/stock"> 
        Stock_details 
       </a> 
      </li> 
     </ul> 
    @endif 
</div> 

ミドルウェア:

BranchAdmin:

class BranchAdmin 
{ 
    public function handle($request, Closure $next){ 
     if(Auth::user()->type === 'BranchAdmin'){ 
      return redirect('/branch/'.Auth::user()->branch->id); 
     } 
     return $next($request); 
    } 
} 

UserIsAdmin:

class UserIsAdmin 
{ 
    public function handle($request, Closure $next) 
    { 
     if(Auth::user()->type === 'Admin'){ 
      return redirect('/Super/admin'); 
     } 
     return $next($request); 
    } 
} 

UserIsNotAdmin:

class UserIsNotAdmin 
{ 
    public function handle($request, Closure $next) 
    { 
     if(Auth::user()->type === 'User'){ 
      return redirect('/profile'); 
     } 
     return $next($request); 
    } 
} 

答えて

1

あなたのミドルウェア・ロジックは、右ではないようです。私はあなたが間違いなくリダイレ​​クトをたくさん持っているべきだと思います。私は一例としてミドルウェアを1つ取ります。

class UserIsNotAdmin 
{ 
    public function handle($request, Closure $next) 
    { 
     if(Auth::user()->type === 'User'){ 
      return redirect('/profile'); 
     } 
     return $next($request); 
    } 
} 

は何を言っていることはタイプ「ユーザー」の利用者がhttp://website/profileになった場合

If the user is of type 'User', always redirect them to '/profile' 

。したがって、それは何度も繰り返しプロファイリングするためにそれらをリダイレクトし続けるということです。

実際に行うべきことは、ミドルウェアが何をしているのかです:侵入者を止める:)。例えば:UserIsNotAdminミドルウェアで、行うこの

if(!Auth::user()->type === 'User'){ 
    redirect('/home'); 
} 
return $next($request); 

if the user IS NOT of type 'User', send them home. Else, let them in. 
に変換します
関連する問題