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()的两个消息:

enter image description here

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

所以,你可以简单地拥有这在策略:

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

Laravel自动设置$currentUserAuth::user()