Laravel策略 - 从控制器传输的错误用户
问题描述:
我注册了访问用户配置文件的策略(查看,编辑)。 我允许它,如果:Laravel策略 - 从控制器传输的错误用户
- 您要查看个人资料属于你
- 你有权限“编辑任何配置文件”。
所以这是我view()
- 功能在策略:
public function view(User $user)
{
debug('User in Controller: '.$user->id);
return (Auth::user()->id === $user->id) || Auth::user()->can('edit any profile');
}
这是方法来显示从ProfileController可采取纵断面图:
public function show(User $user) {
debug('User in Controller: '.$user->id);
$this->authorize('view', $user);
return view('profile.index')->with([
"user" => $user,
]);
}
最后的路线:
Route::get('/profile/{user}', '[email protected]')->name('profile');
当然,政策已经登记在AuthServiceProvider:
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
User::class => ProfilePolicy::class,
];
基本上器发送错误的用户的政策。以下是各debug()
的两个消息:
答
所以我不喜欢回答我的问题,但我发现了什么问题。策略函数中的第一个参数始终是当前用户的一个实例。
所以,你可以简单地拥有这在策略:
public function view(User $currentUser, User $user)
{
return $currentUser->is($user) || $currentUser->can('edit any profile');
}
Laravel自动设置$currentUser
到Auth::user()
。