gpt4 book ai didi

php - 带有额外参数的策略

转载 作者:行者123 更新时间:2023-12-04 12:17:39 25 4
gpt4 key购买 nike

我知道,如何使用 Laravel 策略并且一切正常,但我坚持使用 create(...)方法。

我的应用程序是滑雪运动员的训练日记。每个赛车手都可以管理(查看、添加、编辑...)自己的日记。每个训练员都可以管理自己的日记,所有赛车手的日记,但不能管理其他训练员的日记。我使用本地 Laravel 策略,它在 * update(...) 期间运行良好和 delete(...)方法,但不是 create(...) .

TrainingRecordPolicy.php:

public function update(User $user, TrainingRecord $record)
{
if ($user->id == $record->user->id) {
return true;
}
if ($user->isTrainer() && $record->user->isRacer()) {
return true;
}
return false;
}

我在 Controller 中使用它,例如 $this->authorize('update', $record) .但是如果我想检查,如果用户可以在其他用户日记中创建新记录,我不知道如何处理。

这不起作用 $this->authorize('create', TrainingRecord::class, $diaryOwner)如果我使用 $this->authorize('createDiaryRecord', $diaryOwner)它调用内部的方法 UserPolicy .

如何发送 $diaryOwner作为 create() 的额外参数政策内的方法?

Note: $diaryOwner is retrieved from the route parameter user in route with signature /diary/{user}

最佳答案

您可以访问 $diaryOwner在政策中使用 request() helper 。

public function create(User $user) 
{
$diaryOwner = request()->user; // because route is defined as /diary/{user}
}

可能有问题,因为:

When using dynamic properties, Laravel will first look for the parameter's value in the request payload. If it is not present, Laravel will search for the field in the route parameters.



所以不要使用 request()->user使用 request()->route()->parameter('user') .

此外,如果您正在使用 \Illuminate\Routing\Middleware\SubstituteBindings::class你会得到 User实例。

关于php - 带有额外参数的策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50236617/

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