2017-07-31 52 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