gpt4 book ai didi

laravel - 对 Laravel Controller 策略中的 $this->authorize() 感到困惑

转载 作者:行者123 更新时间:2023-12-05 08:03:31 24 4
gpt4 key购买 nike

public function update(Request $request, Post $post)
{
$this->authorize('update', $post);

}

根据我的理解,第二个参数告诉 Laravel 哪个模型是关于“更新”权限的。在本例中,$post (App\Models\Post) 模型。让我感到困惑的部分是,第二个 authorize() 是否仅作为对模型的引用存在,或者是否确实传递了实际模型的实例,即使“更新”方法不需要它?

不需要实际 $post 实例的更新策略示例:

public function update(User $user)
{
return $user->hasPermissionTo('update posts');
}

需要 $post 实例的更新策略示例:

public function update(User $user, Post $post)
{
return $post->user_id === $user->id;
}

$this->authorize('update', $post) 是否适用于这两个示例,即使在一种情况下更新方法只需要一个参数而在另一种情况下它需要两个参数?如果需要三个呢?

最佳答案

您正在编写策略方法,因此您可以确定它需要哪些参数。在您的示例中,您正在调用 $this->authorize('update', $post) 因此您的策略方法需要有一个 $post 参数来表示对象已更新。

显然,如果您不将其作为参数传递,则它没有任何可授权的内容。没有模型参数的策略方法适用于没有模型可授权的情况,例如创建函数。

来自 the documentation :

Some policy methods only receive an instance of the currently authenticated user. This situation is most common when authorizing create actions. For example, if you are creating a blog, you may wish to determine if a user is authorized to create any posts at all. In these situations, your policy method should only expect to receive a user instance.

关于laravel - 对 Laravel Controller 策略中的 $this->authorize() 感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72366634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com