2017-06-01 55 views
0

我註冊了訪問用戶配置文件的策略(查看,編輯)。 我允許它,如果: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

回答

0

所以我不喜歡回答我的問題,但我發現了什麼問題。策略函數中的第一個參數始終是當前用戶的一個實例。

所以,你可以簡單地擁有這在策略:

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

Laravel自動設置$currentUserAuth::user()