2017-01-25 56 views
9

Ben basit bir politika oluşturmak için jeneratör kullandık:İlke yeteneği yöntemi neden aranmıyor?

php artisan make:policy TeamPolicy 

Ve ben AuthServiceProvider bunu kaydedildi:

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

ben bunu aramaya çalıştım TeamsController olarak:

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

Benim politika dosyam Policies\TeamPolicy.php olarak yazılmıştır:

<?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; 
    } 
} 

Ancak ilkesinde güncelleme yöntemi denir ve $this->authorize('update', $team);

bildiriniz çağrılırken hatasını 403 olsun asla!

+0

Takım işleyiciniz nasıl görünüyor? – Kasnady

+0

TeamsController diğer normal denetleyicilere benziyor. '$ This-> yetkilendirmesini (' update ', $ team)' içeren çağrıyı içeren düzenleme ve güncelleme yöntemleri de dahil olmak üzere pek çok yönteme sahiptir: 'yukarıdaki hata çıktılarını verir.Ne yazık ki, denetleyicinin özelliklerini kimseyle paylaşamıyorum. bu gizlidir. – WingsOfAltair

cevap

2

İlke yöntemlerinin ilk argümanı, yetkilendirmeyi denetleyen kullanıcı olmalıdır. Bunun yerine deneyin:

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

Bu, hiçbir şeyi düzeltmez. – WingsOfAltair

+0

@ user7409342 "$ team" değişkeninin "Team" sınıfının bir örneği olduğundan emin misiniz? Nasıl başardın? – alepeino

+0

$ team nesnesini, app/Team.php'de bulunan Team sınıfından başlatıyorum. – WingsOfAltair