我在这里读到,在 Laravel 中我们可以can
在路由上使用该方法代替传统的中间件调用。https ://laravel.com/docs/11.x/authorization#middleware-actions-that-dont-require-models
use App\Models\Post;
Route::post('/post', function () {
// The current user may create posts...
})->can('create', Post::class);
现在中间件的传统方法是这样的:
Route::post('/post', function () {
// The current user may create posts...
})->middleware('can:create,App\Models\Post');
我真的很喜欢这种can
方法,如果能够用这种方法来代替中间件调用更新就好了:
use App\Models\Post;
Route::put('/post/{post}', function (Post $post) {
// The current user may update the post...
})->middleware('can:update,post');
有办法吗?文档中没有关于此内容的任何内容...
使用
can
方法更新路线->can('update', 'post')
:指定要应用的授权策略。其中,'update'
是策略方法,'post'
是传递给该方法的参数。Laravel 会自动从路由参数中注入模型实例并执行授权检查。在您的中
PostPolicy
,您应该有一个如下方法:您需要遵循几个步骤。
创建并注册你的
Policy
课程。使用此命令创建一个策略类。生成的策略将放置在
app/Policies
目录中。这个类看起来像这样。
然后将其注册
policy-class
到boot
您的应用程序的方法中AppServiceProvider
,就像这样。最后,您可以
can
在路由中PostPolicy
像这样使用此类。注意:
Post
模型必须具有一个与之匹配的授权foreign-key
名称。如果没有找到匹配的用户,那么将返回状态为 403 的 HTTP 响应。user_id
update
Policy
Generating Policies
&部分。Registering Policies