我正在与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的同时向控制器类添加相同的构造函数吗?还是我的做法是正确的?
答案 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\CartController
和Carts\CartCouponController
上添加构造函数。