Laravel如何校验ID匹配 阻止未授权调用Controller更新预订接口
Laravel 预订记录所属权校验实现方案
关于Auth::user()的可用性
只要你的路由正确挂载了auth:api中间件、api认证配置正常,Auth::user()和你代码里用的auth('api')->user()都可以正确获取当前登录用户实例,完全支持你做用户ID交叉校验的需求。
现有代码问题
你当前的update方法存在两个可优化点:
- 路由模型绑定已经自动注入了对应ID的
$booking实例,方法内重复查询时使用了未定义的$id变量,会直接触发报错 - 校验逻辑直接写在业务方法内,后续新增删除、详情等需要校验所属权的接口时,会产生大量重复代码
控制器内封装校验逻辑的实现
推荐方案:构造函数内统一注册校验中间件
利用Laravel控制器内置的闭包中间件能力,在方法执行前统一完成所属权校验,一次编写即可覆盖所有需要操作单条预订记录的接口(详情、更新、删除),校验不通过直接拦截请求,不会进入后续业务逻辑,完全满足你后端校验的安全要求。
控制器代码示例:
<?php namespace App\Http\Controllers; use App\Models\Booking; use Illuminate\Http\Request; class EventController extends Controller { public function __construct() { // 所有接口先过api登录校验 $this->middleware('auth:api'); // 统一校验预订记录所属权,仅对操作单条记录的接口生效 $this->middleware(function ($request, $next) { $currentBooking = $request->route('booking'); if ($currentBooking && $currentBooking->created_by !== auth('api')->id()) { abort(403, '无权操作其他用户的预订记录'); } return $next($request); })->only(['show', 'update', 'destroy']); } public function update(Request $request, Booking $booking) { // 走到此处时已经完成登录校验和所属权校验,直接处理业务即可 $validated = $request->validate([ 'start_date' => 'required|date', 'end_date' => 'required|date|after:start_date', 'resourceIds' => 'required|integer' ]); $booking->fill($validated); $booking->save(); return $booking; } // 其余show、destroy方法无需重复写校验逻辑,自动应用统一规则 public function destroy(Booking $booking) { $booking->delete(); return response()->noContent(); } }
轻量方案:抽离私有校验方法
如果不想在构造函数中编写逻辑,也可以在控制器内抽离一个私有校验方法,在需要校验的业务方法开头调用即可:
// 控制器内添加私有校验方法 private function validateBookingOwner(Booking $booking): void { if ($booking->created_by !== auth('api')->id()) { abort(403, '无权操作其他用户的预订记录'); } } public function update(Request $request, Booking $booking) { $this->validateBookingOwner($booking); // 后续写更新业务逻辑即可 }
注意事项
- 永远不要从前端请求参数中获取用户ID做权限校验,所有用户身份信息都从后端认证体系(也就是
auth('api')->id())获取,从根源避免参数篡改风险 - 路由模型绑定已经自动完成了根据URL参数查询对应记录的逻辑,不需要额外调用
findOrFail重复查库,避免不必要的性能开销 - 未登录状态下
auth('api')->id()会返回null,所以一定要保证所有需要权限的接口都挂载了auth:api中间件,避免校验逻辑失效
内容的提问来源于stack exchange,提问作者Miggle
相关产品推荐
相关产品推荐

