2017-07-31 153 views
0

我在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是否由當前用戶擁有。

回答

0

在Laravel文檔有this例如:

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

所以,你不應該需要在用戶通過

+0

謝謝你的回覆!但如果我這樣做,那麼授權總會回報真實!哈哈,即使我做「回報虛假」,它也會被忽略 – user3159043

+0

你的路線有auth中間件嗎?你用'dd(Auth :: user())'得到用戶? – user3743266

+0

是的,我的路線有auth中間件,我的Auth :: user()和我的$ shop都很好:(我在我的store()函數上做了dd(),然後用我的axios上的console.log()請求...都很好,它真的很奇怪 – user3159043