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);
}
Check out my aktualisierte Frage! –
Überprüfen Sie meine aktualisierte Antwort, hoffe, es funktioniert :) – andonovn
es funktioniert gut, aber dann kann ich es nicht in Sicht arbeiten, @if (Auth :: user() -> kann ('speichern', [Baum :: Klasse, $ Turnier])) funktionieren einfach nicht –