You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel的更新路由中使用can()方法?

在Laravel路由中使用can方法替代带模型绑定的can中间件

当然可以实现,can路由方法完全支持带模型绑定的权限校验场景,用法和can中间件保持一致,能完美保持代码风格的统一性。

示例用法

原来的can中间件写法:

use App\Models\Post;
Route::put('/post/{post}', function (Post $post) {
    // 当前用户可更新该文章
})->middleware('can:update,post');

对应的can路由方法写法:

use App\Models\Post;
Route::put('/post/{post}', function (Post $post) {
    // 当前用户可更新该文章
})->can('update', 'post');

原理说明

路由的can方法本质是can中间件的语法糖,底层会自动将参数转换为对应的中间件调用,因此所有can中间件支持的参数逻辑,can路由方法都能兼容:

  • 当需要校验路由绑定的模型实例权限时,直接传入路由参数的名称(如'post')即可,Laravel会自动解析对应的模型实例完成权限检查
  • 若需要自定义校验逻辑,还可以传入闭包动态返回校验对象:
Route::put('/post/{post}', function (Post $post) {
    // ...
})->can('update', fn () => $post);

这种写法既保持了代码风格的一致性,又和原中间件的权限校验逻辑完全等价。

内容的提问来源于stack exchange,提问作者inf3rno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 06:17:12