2016-11-24 63 views
1
使用爲不同類型的用戶相同的路線

我的應用程序將具有醫生,患者和管理員在Laravel

現在我想對所有的角色相同的路線。如下:

app.com/dashboard/ 
app.com/dashboard/appointments 

但我想有一個不同的控制器爲病人使用,併爲醫生offcourse。我試過以下沒有成功

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

/* Doctor */ 
Route::group(['middleware' => ['role:doctor']], function() { 
    Route::get('/appointments', 'Doctor\[email protected]'); 
}); 

/* Patient */ 
Route::group(['middleware' => ['role:patient']], function() { 
    Route::get('/appointments', 'Patient\[email protected]'); 
}); 

});

我得到了由我的角色中間件造成的403(未授權)錯誤。即使沒有,我認爲它只是覆蓋另一個?

有沒有人能夠使用完全不同的目的相同的路線(/儀表板)?又名不同的控制器/視圖

謝謝!

+2

我不是100%肯定,所以我不希望將其添加爲一個答案,但我認爲最簡單和可以說是最具可讀性的解決方案是創建一個通用中間件,該中間件可以接受任一角色,以及一個通用的AppointmentController,其目的僅在於根據當前用戶的角色指向正確的控制器。 –

+0

控制器重定向到另一個看起來不太好,但你的答案是有道理的!奇怪,這是很難實現 – Notflip

+0

我會與@Notflip爭論。將控制器方法在各處來回重定向並不是一件好事。在這種情況下,雖然它可能實際上是相當不錯的,只有一個儀表板控制器根據角色委派/代理到每個完全獨立的控制器。我想這就是我在這種情況下要做的。 – tam5

回答

0

您可以通過檢查用戶角色使用此解決方法,然後調用相應的控制器功能爲:

Route::get('appointment', function() 
{ 
    if (auth()->user()->isDoctor()) 
    { 
     app()->call('Doctor\[email protected]') 
    } 
    elseif(auth()->user()->isPatient()) 
    { 
     app()->call('Patient\[email protected]') 
    } 
});