2017-06-01 39 views
0

J'ai enregistré une politique pour accéder aux profils de l'utilisateur (voir, éditer). Je demande d'autoriser si:Politique de Laravel - Mauvais utilisateur transmis par le contrôleur

  • Le profil que vous essayez d'afficher vous appartient
  • Vous avez la permission « modifier tout profil ».

donc c'est mon view() -Function dans la politique:

public function view(User $user) 
    { 
     debug('User in Controller: '.$user->id); 
     return (Auth::user()->id === $user->id) || Auth::user()->can('edit any profile'); 
    } 

Ceci est la méthode pour afficher la vue de profil pris de la ProfileController:

public function show(User $user) { 
     debug('User in Controller: '.$user->id); 
     $this->authorize('view', $user); 

     return view('profile.index')->with([ 
      "user" => $user, 
     ]); 
    } 

Et enfin la route:

Route::get('/profile/{user}', '[email protected]')->name('profile');

Bien sûr, la politique a été enregistrée dans le AuthServiceProvider:

protected $policies = [ 
     'App\Model' => 'App\Policies\ModelPolicy', 
     User::class => ProfilePolicy::class, 
    ]; 

Fondamentalement, le contrôleur transmet le mauvais utilisateur à la stratégie. Voici les messages des s debug() respectifs de »:

enter image description here

Répondre

0

Je n'aime pas répondre à mes propres questions, mais j'ai découvert quel était le problème. Le premier paramètre d'une fonction de stratégie est toujours une instance de l'utilisateur actuel.

Ainsi, vous pouvez tout simplement avoir dans votre politique:

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

Laravel définit automatiquement $currentUser-Auth::user().