Laravel政策 - 错误的用户从Controller传输

时间:2017-06-01 14:59:12

标签: laravel laravel-5 controller policy authorize

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

  • 您要查看的个人资料属于您
  • 您拥有权限"编辑任何个人资料"。

所以这是我的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()的消息:

enter image description here

1 个答案:

答案 0 :(得分:0)

所以我不想回答我自己的问题,但我发现了问题所在。策略函数中的第一个参数始终是当前用户的实例。

所以你可以在你的政策中简单地说明这一点:

public function view(User $currentUser, User $user)
    {
        return $currentUser->is($user) || $currentUser->can('edit any profile');
    }

Laravel自动将$currentUser设置为Auth::user()