【发布时间】:2016-07-28 17:19:27
【问题描述】:
我正在尝试授权用户角色删除/更新帖子。我正在使用策略来执行此操作,但我只能将一个参数传递给策略函数。如果我传递的不仅仅是用户和另一个变量,则该变量不会传递到函数中。
模型:用户有很多角色,一个角色可以发布多个帖子。因此,出于授权目的,我必须将帖子的 character_id 与当前角色的 id 进行比较...-
根据docs,您可以将更多倍数传递给 Gate Facade:
Gate::define('delete-comment', function ($user, $post, $comment) {
//
});
但我无论如何都找不到政策。我要做的是注入 Request 对象以获取授权所需的对象。基本上我什至不需要用户对象。
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
使用 Request 对象是可行的,但感觉很 hacky。有没有更好的方法来实现这一点?
编辑:
在CharacterLocationController 中,我有一个方法show,我想在显示资源之前授权该操作。
public function show(Request $request, Character $character, Location $location)
{
$this->authorize([$location, $character]);
...
}
该策略是这样注册的:'App\Location' => 'App\Policies\LocationPolicy' 在AuthServiceProvider
我转储了传递给策略函数的数组,它只输出$location。
public function show(User $user, $data) {
dd($data); // expecting location and character
return !$location->private || $location->authorized->contains($this->character);
}
【问题讨论】:
标签: php laravel authorization laravel-5.2