如何在API中为不同类型的用户限制控制器或路由

时间:2019-07-18 20:01:02

标签: php laravel

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

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

$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的同时向控制器类添加相同的构造函数吗?还是我的做法是正确的?

1 个答案:

答案 0 :(得分:0)

您做对了。

我希望通过路由来限制请求,因此无需在每个新的Controller上添加构造函数。

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上添加构造函数。