如何在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
相关产品推荐
相关产品推荐

