2016-06-08 96 views
2

我目前正在構建我的第一個幼蟲應用程序。中間件覆蓋Laravel中的其他中間件

我有兩種用戶類型:buyerssellers。但是,他們都可以訪問相同的路線,但他們需要提供不同的模板和數據。例如,兩者都可以訪問/home,但看到完全不同的東西。

我知道我可以在路線中使用一條if語句,但這會變得混亂。爲了嘗試解決這個問題,我使用兩個不同的路由組創建了兩個獨立的中間件。每個中間件檢查權限的用戶,並記錄他們,如果他們沒有它,就像這樣:

 if (Auth::user()->role !== 'buyer') { 
      return redirect('login'); 
     } 

我的目標:

  • 如果用戶isBuyer「,它只是讀取中間件路由組。
  • 如果用戶'isSeller',它只讀取該中間件組。

我希望能串聯使用兩種:

// this will be triggered if they have the role 'buyer' 
    Route::group(['middleware' => 'isBuyer'], function() { 
     Route::get('/', function () { 
      return view('/home-seller'); 
     }); 
    }); 

//this will be triggered if they have the role 'seller' 

     Route::group(['middleware' => 'isSeller'], function() { 
     Route::get('/', function () { 
      return view('/home-buyer'); 
     }); 
    }); 

但它永遠不會讀取第二組。由於第一組上的身份驗證測試失敗,它將我註銷。

我認爲這是因爲它在完成閱讀routes.php文件之前應用中間件過濾器。 對於不同的用戶類型使用相同的路由最好處理什麼?

回答

1

您可以使用這樣的事情: -

$middleware = ''; 
    if (Auth::user()->role == 'buyer') { 
       $middleware = 'isBuyer'; 
      } 
    elseif(Auth::user()->role == 'seller') { 
      $middleware = 'isSeller'; 
    } 
else{ 
    return redirect('login'); 
} 

    Route::group(['middleware' => $middleware], function() { 
      Route::get('/', function () { 
       return view('/home-seller'); 
      }); 
     }); 
1

如何使用單個路由並使用每個角色的「if blocks」根據角色呈現控制器(返回視圖)。你能試試嗎?

1

對於這個需求,我認爲你應該檢查你的應用程序控制器/父控制器中的用戶角色,並根據該角色將用戶重定向到他們各自的操作。