【问题标题】:How to Restrict controllers or routes for different type of users in API如何在 API 中为不同类型的用户限制控制器或路由
【发布时间】:2019-11-27 19:46:05
【问题描述】:

我正在使用 laravel 进行一个项目。在我的项目中,有两种类型的用户,一种是管理员,另一种是普通用户。 btw 项目只提供 API,没有刀片视图。

我为任何使用 api 登录的用户或管理员提供一个令牌。并且应用程序将通过发送带有授权标头的令牌来识别用户或管理员,我检查令牌是否有效并且用户类型是管理员然后授予对该客户端的管理功能的访问权限。 这是我这部分的代码:

$admin = Auth::guard('admin-api')->user();
if ($admin) {
    // allow to use admin features
}
else {
    return response()->json(['error' => 'token is invalid'], 401);
}

我在 laravel 中阅读了一些关于在控制器类上应用限制的内容,并在那里编写了将这样的构造函数添加到控制器类中:

  public function __construct() {
    $this->middleware('admin-api');
  }

还有一些类似的东西只是为了限制路线。 like this

但我只是想知道在项目只提供 API 时是否有必要向我的控制器类添加相同的构造函数?还是我这样做的方式是正确的?

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    你做得对。

    我更喜欢通过路由限制请求,因此不需要在每个新控制器上添加构造函数。

    Route::middleware(['admin-api'])
        ->group(function () {
            Route::get('cart', 'Carts\CartController@retreive');
            Route::post('cart/coupon', 'Carts\CartCouponController@addCoupon');
            Route::delete('cart/coupon', 'Carts\CartCouponController@deleteCoupon');
            Route::delete('cart/flyer', 'Carts\CartController@deleteFlyer');
        });
    

    这将在组中的所有路由上应用admin-api 中间件,无需在Carts\CartControllerCarts\CartCouponController 上添加构造函数,只是为了限制中间件。

    【讨论】:

    • hmmmm ...我想你误会了!我想知道在 API 项目中我应该使用中间件限制路由还是控制器?还是可以检查令牌并查看该用户是否为管理员?(如第一个代码框)
    • 抱歉回复晚了。据我所知,无论您是在构造函数还是路由中限制它都没有关系。 Laravel 是一个成熟的框架,可以快速解决安全漏洞。当您使用 API 项目时,您只需使用令牌来检查请求的真实性。因此,要检查用户是否是管理员,您肯定必须检查令牌以及每个请求的令牌。如果您不想在每个请求上都访问数据库,则可以缓存令牌-用户关系。
    猜你喜欢
    • 1970-01-01
    • 2019-07-10
    • 2019-03-11
    • 2020-10-09
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 2023-03-05
    相关资源
    最近更新 更多