我在Laravel上遇到一些问题。问题是,无论我做什么,我的创建策略总是返回错误,即使当我明确地让它“返回真实”时,它也会给我403禁止。 重要的是要提到,我正在向我的MenuController @ store函数发送一个带有axios的POST请求,然后在我的商店函数中,我从我的策略调用$ this-> authorize('create')...Laravel授权总是返回false
请看:
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'
];
谁能帮我想出解决办法? :( 非常感谢所有帮助。 非常感谢你!
**** ****编辑
对于任何可能与它挣扎,我想通了,发生了什么事,因为我m在MenuPolicy上做了这个链接到Menu模型的验证,并且我将一个Shop实例传递给了create()方法,我猜它不会起作用,我可能会误解它的工作原理... 所以为了解决这个问题,我在我的Shop策略中创建了一个“createMenu()”函数,这样我就可以将Shop实例传递给该方法,并且它将工作得很好:),因为我只需要验证Shop是否由当前用户拥有。
谢谢你的回复!但如果我这样做,那么授权总会回报真实!哈哈,即使我做“回报虚假”,它也会被忽略 – user3159043
你的路线有auth中间件吗?你用'dd(Auth :: user())'得到用户? – user3743266
是的,我的路线有auth中间件,我的Auth :: user()和我的$ shop都很好:(我在我的store()函数上做了dd(),然后用我的axios上的console.log()请求...都很好,它真的很奇怪 – user3159043