【发布时间】:2018-01-07 13:34:06
【问题描述】:
我在 Laravel 上的策略有一些问题。问题是,我的创建策略总是返回 false,无论我做什么,即使我明确地让它“返回 true”,它也会给我 403 禁止。 重要的是要提到我正在使用 axios 向我的 MenuController@store 函数发出 POST 请求,然后在我的商店函数中我从我的策略中调用 $this->authorize('create') ...
看看:
MenuController@store
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');
}
菜单策略
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()方法,我想它不会起作用,我可能误解了 poilcy 的工作原理...... 所以为了解决这个问题,我刚刚在我的 Shop 策略中创建了一个“createMenu()”函数,这样我可以将一个 Shop 实例传递给该方法,它会正常工作:),因为我只需要验证 Shop 是否是归当前用户所有。
【问题讨论】:
标签: php laravel authorization axios policy