我在Laravel政策上遇到了一些问题。问题是,无论我做什么,我的创建政策总是返回假,即使我明确表示它会回复真实,它会给我403禁止。 重要的是要提到我使用axios向我的MenuController @ store函数发出POST请求,然后在我的商店函数中我调用$ 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上进行了此验证,并且我将Shop实例传递给create()方法,我想它不会工作,我可能误解了这个有效的工作...... 所以为了解决这个问题,我刚刚创建了一个" createMenu()"在我的Shop策略中运行,这样我可以将Shop实例传递给方法,它会正常工作:),因为我只需要验证Shop是否归当前用户所有。