【发布时间】:2018-10-18 13:59:15
【问题描述】:
我知道,如何使用 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;
}
我在$this->authorize('update', $record) 等控制器中使用它。但是如果我想检查,如果用户可以在其他用户日记中创建新记录,我不知道如何处理。
这不起作用$this->authorize('create', TrainingRecord::class, $diaryOwner),如果我使用$this->authorize('createDiaryRecord', $diaryOwner),它会调用UserPolicy 中的方法。
如何将$diaryOwner 作为额外参数发送到策略中的create() 方法?
注意:
$diaryOwner是从带有签名/diary/{user}的路由中的路由参数user获取的
【问题讨论】:
-
你是怎么得到
$diaryOwner的? -
来自路由参数:
/diary/{user}/new-record。 TrainingRecord 没有详细信息(视图)。整个赛季只有一张表格,所有记录都列在日历议程之类的东西中。 -
所以在示例中
$this->authorize('create', ..., $diaryOwner)$diaryOwner是User 的实例还是只是id? User模型和Diary模型有什么关系?将其添加到 OP。 -
没有型号
Diary。有TrainingRecord和User两种型号。用户可以有更多的记录。在路线/diary/{user}中,您可以在日历议程之类的内容中查看用户的所有TrainingRecords。您可以将其视为日历。你有日历,你的教练有日历。他可以写进你自己的。但你不能写到他的
标签: php laravel laravel-5.4 laravel-authorization