我注册了一个访问用户个人资料的政策(查看,编辑)。 我要么允许它:
所以这是我的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}', 'ProfileController@show')->name('profile');
当然,该策略已在AuthServiceProvider中注册:
protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
User::class => ProfilePolicy::class,
];
控制器基本上将错误的用户传输到策略。以下是来自相应debug()
的消息:
答案 0 :(得分:0)
所以我不想回答我自己的问题,但我发现了问题所在。策略函数中的第一个参数始终是当前用户的实例。
所以你可以在你的政策中简单地说明这一点:
public function view(User $currentUser, User $user)
{
return $currentUser->is($user) || $currentUser->can('edit any profile');
}
Laravel自动将$currentUser
设置为Auth::user()
。