2015-08-08 68 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”来限制哪些方法可以由哪条路径执行。