2017-01-24 7 views
0

Мне нужна политика создания деревьев в турнире.Политика 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); 
} 

ответ

1

Я считаю, что первым аргументом функции generateTree() должен быть аутентифицированный пользователь. Попробуйте изменить его public function generateTree(User $user, Tree $tree, Tournament $tournament)

Edit: изменить также может не метод Auth::user()->cannot('generateTree', [Tree::class, $tournament]) (объединить 2-й и 3-й параметры в массиве, кажется, Laravel всегда ожидает 2 аргумента, где второй один может быть массив)

+0

Проверьте мой обновленный вопрос! –

+0

Проверьте мой обновленный ответ, надеюсь, он работает :) – andonovn

+0

работает хорошо, но тогда я не могу заставить его работать в поле зрения, @if (Auth :: user() -> can ('store', [Tree :: класс, турнир $)])) просто не работает –

Смежные вопросы