Laravel 策略 - 从控制器传输错误的用户

Laravel Policy - Wrong User transmitted from Controller

我注册了访问用户个人资料(查看、编辑)的政策。 我要么允许它,如果:

所以这是我的 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中已经注册了Policy:

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()