У меня есть некоторые проблемы с политиками на 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 принадлежит текущему пользователю.
В Laravel Docs есть этот пример:
$this->authorize('create', $shop);
Так что вам не нужно проходить через пользователя
Других решений пока нет …