Мне нужна политика создания деревьев в турнире.Политика Laravel разрешает странные
Итак, в моем treeController @ магазине, у меня есть:
if (Auth::user()->cannot('generateTree', new Tree(),$tournament)) {
throw new AuthorizationException();
}
И моя соответствующая политика:
TreePolicy.php:
public function generateTree(Tree $tree, Tournament $tournament)
{
dd($tournament);
return ($tournament->user_id == Auth::user()->id);
}
И я получаю:
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
Что я не хватает ???
EDIT: В ответ на @andonovn,
Я пробовал с:
public function store(User $user, Tree $tree, Tournament $tournament)
{
dd($tournament);
}
И
if (Auth::user()->cannot('generateTree', Tree::class,$tournament)) {
throw new AuthorizationException();
}
-> он дает мне 403
Или
$this->authorize('store', $tournament,Tree::class);
-> он не входит в dd();
Единственный способ, которым я нашел его на работу ставит содержание политики в контроллере, который не так хорошо:
if ($tournament->user_id != Auth::user()->id){
throw new AuthorizationException();
}
EDIT 2: Я решить с этим:
В контроллере:
if (Auth::user()->cannot('store', [Tree::class,$tournament])) {
throw new AuthorizationException();
}
В политике
public function store(User $user, Tournament $tournament)
{
return ($tournament->user_id == $user->id);
}
Проверьте мой обновленный вопрос! –
Проверьте мой обновленный ответ, надеюсь, он работает :) – andonovn
работает хорошо, но тогда я не могу заставить его работать в поле зрения, @if (Auth :: user() -> can ('store', [Tree :: класс, турнир $)])) просто не работает –