2015-08-08 83 views
0

我正在使用Oauth2(lucadegasperi/oauth2-server-laravel)使用不同範圍的Laravel API,可以說管理員和用戶。 API在前端提供了一個emberjs應用程序。顯然用戶將有權訪問比管理員更少的資源。 我的問題是,燼將請求某些路線,應該有相同的名稱,但會使用不同的控制器。Laravel Oauth2 Scopes and Routes

我想設置我的api,以便我可以使用相同名稱的路由,在兩個範圍內使用不同的控制器,這樣我就可以分離一些東西。因爲我想大部分保持原來的餘燼應用程序結構。

問題是,當我作爲管理員發出請求時,它會引發403條說只有用戶範圍可以使用該路由。

這不是我以爲會發生。我認爲過濾器會先檢查範圍並輸入路線,即使在另一個範圍內存在相同的路線。但從它的外觀來看,您必須使用不同的路由名稱,這對我的Ember應用程序不利,或者您要過濾從每個控制器和方法發送給每個角色的內容,並使用路由過濾器「oauthOr」,以便這兩個角色都可以訪問控制器。

如果沒有辦法做我想要的(見代碼),有沒有辦法阻止控制器根據用戶角色/範圍執行某些方法?公寓從手動「ifing和別人」到處都是?

下面是一個例子,說明了我想要完成的事情。

Route::group(array('prefix' => 'api/1', 'before' => 'oauth:admin'), function(){ 

    Route::resource('cars', 'ApiAdminCarsController'); 
    Route::resource('bikes', 'ApiAdminBikesController'); 

}); 

Route::group(array('prefix' => 'api/1', 'before' => 'oauth:user'), function(){ 

    Route::resource('cars', 'ApiUserCarsController'); 
    Route::resource('bikes', 'ApiUserBikesController'); 

}); 
+0

您使用的是什麼版本的Laravel? –

+0

我們仍在使用4.2,這是我們上次觸摸api時的最新版本。 – bzlies

+1

在這裏爲我的大腦制定一個正確的答案已經太遲了,但我建議使用'Route :: before()'與'return Redirect :: action()'結合做你想做的事情。它會有一些if/else的。如果你在Laravel 5中,這對於中間件來說是一個完美的工作。正如您找到的那樣,您無法註冊具有相同路徑的兩條路線。 –

回答

0

在Route :: resource調用中,您可以執行某些事情,如「only」,「except」來限制哪些方法可以由哪條路徑執行。