Laravel authorize всегда возвращает false

У меня есть некоторые проблемы с политиками на Laravel. Проблема в том, что моя политика создания всегда возвращает ложь, независимо от того, что я делаю, даже если я откровенно заставляю ее «возвращать истину», она запрещает мне.
Важно отметить, что я делаю POST-запрос с axios к моей функции MenuController @ store, затем в своей функции store я вызываю $ this-> authorize (‘create’) из моей политики …

Взглянуть:

MenuController @ магазин

public function store(StoreMenuRequest $request, Shop $shop)
{
$this->authorize('create', [Auth::user(), $shop]);
$menu = new Menu;

$menu->name = $request->name;
$menu->slug = str_slug($menu->name, "-");
$menu->shop_id = $shop->id;

$menu->save();

return $menu->load('items');
}

MenuPolicy

public function create(User $user, Shop $shop)
{
return $user->owns($shop);
}

* Обратите внимание, что даже когда я верну true, это не сработает …

Запрос Axios

addNewMenu()
{
var _this = this;
axios.post('{{ Route('chef.menus.store', $shop) }}', {
name : this.menuName
}).then(function(response){
// Menu saved
}).catch(function(error){
// Errors
});
}

Независимо от того, что я делаю, я всегда ошибаюсь из своей политики создания.
Обратите внимание, что когда я удаляю свою функцию $ this-> authorize () из моего контроллера, все работает нормально, поэтому я полагаю, что проблема заключается в авторизации, верно?

Мой AuthServiceProvider, кажется, в порядке:

protected $policies = [
'App\Model' => 'App\Policies\ModelPolicy',
'App\Shop' => 'App\Policies\ShopPolicy',
'App\Menu' => 'App\Policies\MenuPolicy'
];

Может кто-нибудь помочь мне понять это? 🙁
Очень ценю любую помощь.
Большое спасибо!

**** РЕДАКТИРОВАТЬ ****

Для любого, кто может бороться с этим, я выяснил, что происходит, так как я делаю эту проверку на MenuPolicy, которая связана с моделью Menu, и я передаю экземпляр Shop методу create (), я думаю, что это не сработает, я могу неправильно понять, как работает poilcy …
Чтобы исправить это, я просто создал функцию «createMenu ()» внутри своей политики Shop, таким образом я могу передать экземпляр Shop методу, и он будет работать нормально :), потому что мне просто нужно проверить, если Shop принадлежит текущему пользователю.

0

Решение

В Laravel Docs есть этот пример:

$this->authorize('create',  $shop);

Так что вам не нужно проходить через пользователя

0

Другие решения

Других решений пока нет …