Laravel授权总是返回false

时间:2017-07-31 20:47:52

标签: php laravel authorization axios policy

我在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是否归当前用户所有。

1 个答案:

答案 0 :(得分:0)

在Laravel文档中有this示例:

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

所以你不应该传递用户