2017-01-24 1 views
0

Ich brauche eine Richtlinie, um Bäume in einem Turnier zu erstellen.Laravel Richtlinien lösen seltsame

In meinem treeController @ Speicher So, ich habe:

if (Auth::user()->cannot('generateTree', new Tree(),$tournament)) { 
     throw new AuthorizationException(); 
} 

Und meine entsprechende Politik ist:

TreePolicy.php:

public function generateTree(Tree $tree, Tournament $tournament) 
{ 
    dd($tournament); 
    return ($tournament->user_id == Auth::user()->id); 
} 

Und ich bekomme ein:

Type error: Argument 1 passed to App\Policies\TreePolicy::generateTree() must be an instance of App\Tree, instance of App\User given, called in /laravel/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php on line 382 

Was? vermisse ich ???

EDIT: Als Reaktion auf @andonovn,

Ich versuchte es mit:

public function store(User $user, Tree $tree, Tournament $tournament) 
{ 
    dd($tournament); 
} 

Und

if (Auth::user()->cannot('generateTree', Tree::class,$tournament)) { 
     throw new AuthorizationException(); 
    } 

-> es gibt mir eine 403

Oder

$this->authorize('store', $tournament,Tree::class); 

-> es gibt nicht die dd();

Die einzige Art, wie ich es die Politik Inhalt in der Steuerung zu arbeiten gefunden setzt, die nicht so schön ist:

if ($tournament->user_id != Auth::user()->id){ 
     throw new AuthorizationException(); 
    } 

EDIT 2: Ich löse es mit, dass:

In Controller:

if (Auth::user()->cannot('store', [Tree::class,$tournament])) { 
     throw new AuthorizationException(); 
    } 

In Politik

public function store(User $user, Tournament $tournament) 
{ 
    return ($tournament->user_id == $user->id); 
} 

Antwort

1

Ich glaube, das erste Argument von generateTree() muss der authentifizierte Benutzer sein. Versuchen Sie, es zu public function generateTree(User $user, Tree $tree, Tournament $tournament)

Edit: Auch das kann nicht Methode Auth::user()->cannot('generateTree', [Tree::class, $tournament]) ändern (die 2. und 3. Parameter in Reihe verbinden, scheint wie Laravel immer zwei Argumente erwartet, wo der zweite ein Array sein kann)

+0

Check out my aktualisierte Frage! –

+0

Überprüfen Sie meine aktualisierte Antwort, hoffe, es funktioniert :) – andonovn

+0

es funktioniert gut, aber dann kann ich es nicht in Sicht arbeiten, @if (Auth :: user() -> kann ('speichern', [Baum :: Klasse, $ Turnier])) funktionieren einfach nicht –