我在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