【问题标题】:Laravel Oauth2 Scopes and RoutesLaravel Oauth2 范围和路由
【发布时间】:2015-10-31 14:51:11
【问题描述】:

我正在使用 Oauth2 (lucadegasperi/oauth2-server-laravel) 开发一个 Laravel API,它使用不同的范围,比如管理员和用户。 API 为前端的 emberjs 应用程序提供服务。显然,用户可以访问的资源少于管理员。 我的问题是,ember 会向某些应该具有相同名称但将使用不同控制器的路由发出请求。

我想设置我的 api,以便我可以使用同名的路由,在两个范围内使用不同的控制器,这样我就可以分开一些东西。因为我想将 ember 应用程序结构保持原样。

问题是当我以管理员身份发出请求时,它会抛出 403 表示只有用户范围可以使用该路由。

这不是我认为会发生的事情。我认为过滤器会首先检查范围并输入路由,即使同一路由存在于另一个范围内。但从外观上看,您必须使用不同的路由名称,这对我的 Ember 应用程序不利,或者您过滤从每个控制器和方法发送到每个角色的内容,并使用路由过滤器“oauthOr”,以便两个角色都可以访问控制器。

如果无法执行我正在尝试的操作(请参阅代码),是否有办法阻止控制器根据用户角色/范围执行某些方法?到处手动“ifing and elseing”?

下面是一个示例,说明了我要完成的工作。

    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');

});

【问题讨论】:

  • 你使用的是什么版本的 Laravel?
  • 我们仍在使用 4.2,这是我们上次接触 api 时的最新版本。
  • 现在我的大脑想出一个正确的答案为时已晚,但我建议使用Route::before() 结合return Redirect::action() 来做你想做的事。不过,它会有一些 if/else。如果你在 Laravel 5 中,这将是一个完美的中间件工作。正如您所发现的,您不能使用相同的路径注册两条路线。
  • 感谢您的回复,太晚了,哈哈。我看了一下中间件,这正是我想要的,所以我将与团队讨论更新 Laravel,我们的后端人员已经在使用它。
  • 老实说,无论您将其放在中间件还是路由过滤器中,逻辑都是相同的。但请记住,Laravel 5.2 没有路由过滤器。

标签: php laravel oauth-2.0


【解决方案1】:

在 Route::resource 调用中,您可以执行某些操作,例如“only”、“except”来限制哪些方法可以由哪个路由执行。

【讨论】:

    猜你喜欢
    • 2016-11-16
    • 2021-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2018-07-12
    • 2022-01-17
    • 1970-01-01
    相关资源
    最近更新 更多