$this->authorize()如何理解laravel中应该调用哪个策略?

问题描述 投票:0回答:2

我有一些政策,例如

CoursePolicy
,
PostPolicy
,
CommentPolicy
在 Laravel 策略文件夹中定义。

以及我在

AuthServiceProviderClass
的boot方法中注册了策略数组下的所有策略。

但是Laravel如何知道在控制器类中编写时应该调用哪个策略类的方法(在本例中是视图方法)!?

$this->authorize( 'view', Course::findOrFail( $course ) );
laravel authentication policy
2个回答
0
投票

在执行策略时,对于每个

model
,您都会执行相应的
policy
来授权用户操作(这些操作与查看、创建、更新和删除资源有关)。

注册策略时,您通知 Laravel 在授权针对给定

policy
类型的操作时使用哪个
model

如果您在通过 Artisan 控制台生成策略时使用了

--model
选项(例如:
php artisan make:policy CoursePolicy --model=Course
),则它已经包含
viewAny
view
create
update
delete 的方法
restore
forceDelete
操作。

您使用的是 Controller Helpers

$this->authorize()
,因此您需要在正确的方法上写入操作名称,如果失败将返回 403 异常。

这是控制器方法<->策略方法的映射,因此您不必在不同的方法上命名其他策略。

控制器方法 政策方法
索引 查看任意
展示 查看
商店 创建
创建 创建
编辑 更新
更新 更新
摧毁 删除

0
投票

对于任何寻找答案的人: Laravel 了解基于您应该发送给他的模型的策略。根据laravel官方文档,一些策略方法(例如create)不需要模型实例。在这些情况下,您应该将类名传递给授权方法。类名将用于确定授权操作时使用哪个策略:

$this->authorize( 'create', Course::class );//this will check create method in Course Model
$this->authorize( 'create', Post::class );//this will check create method in Post Model 
$this->authorize( 'create', Comment::class );//this will check create method in Comment Model
© www.soinside.com 2019 - 2024. All rights reserved.