2017-01-25 45 views
9

Użyłem generatora do generowania prostych zasad:Dlaczego nie można wywołać metody Policy?

php artisan make:policy TeamPolicy 

I Zarejestrowałem go w AuthServiceProvider jak:

protected $policies = [ 
     Team::class => TeamPolicy::class, 
    ]; 

Próbowałem zadzwonić go w TeamsController jak:

$this->authorize('update', $team); 

Oto mój plik zasad Policies\TeamPolicy.php jako:

<?php 
namespace App\Policies; 
use App\Team; 
use Illuminate\Auth\Access\HandlesAuthorization; 
class TeamPolicy 
{ 
    use HandlesAuthorization; 
    /** 
    * Create a new policy instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     // 
    } 
    public function update(Team $team) 
    { 
     App:debug("Policy update called!"); 
     return true; 
    } 
} 

Jednak metoda zmiana w polityce nigdy nie jest nazywany, i dostaję błąd 403 podczas wywoływania $this->authorize('update', $team);

Proszę doradzić!

+0

Jak wygląda Twój teamcontroler? – Kasnady

+0

My TeamsController wygląda jak każdy inny kontroler regularny. Ma wiele metod, w tym metody edycji i aktualizacji, które zawierają wywołanie '$ this-> authorize ('update', $ team);', które wyprowadza powyższy błąd. Niestety, nie mogę udostępnić specyfikacji kontrolera nikomu takiemu jak jest poufne. – WingsOfAltair

Odpowiedz

2

Pierwszym argumentem metod Policy powinien być użytkownik, który sprawdzi autoryzację. Zamiast tego spróbuj:

public function update(User $user, Team $team) 
{ 
    //... 
} 
+0

To niczego nie naprawi. – WingsOfAltair

+0

@ user7409342 Czy jesteś pewien, że zmienna '$ team' jest instancją klasy" Team "? Jak się masz? – alepeino

+0

Tworzę obiekt $ team z klasy Team znajdującej się w 'app/Team.php'. – WingsOfAltair