laravel authorizeResource 总是拒绝访问

JaC*_*hNo 5 php laravel-middleware laravel-nova laravel-5.8

我为 API 端点创建了一个资源控制器。我还为模型创建了相应的策略。

如果我使用每个方法进行授权检查

$this->authorize('delete', $asset);
Run Code Online (Sandbox Code Playgroud)

然后它按预期工作。但是如果我将以下内容添加到构造中,我总是会收到 403 禁止。不确定我缺少什么,因为以下内容应适用于所有方法的授权。

$this->authorizeResource(Asset::class, 'asset');
Run Code Online (Sandbox Code Playgroud)

这是我的路线:

Route::group(['middleware' => ['auth:api']], function () {
    Route::Resource('asset', 'AssetsApiController');
});
Run Code Online (Sandbox Code Playgroud)

我的政策是这样注册的:

protected $policies = [
    Asset::class => AssetPolicy::class,
];
Run Code Online (Sandbox Code Playgroud)

我的删除策略方法是

public function delete(User $user, Asset $asset)
{
    return true;
}
Run Code Online (Sandbox Code Playgroud)

API 控制器构造函数如下所示:

public function __construct()
{
    $this->authorizeResource(Asset::class,'asset');
}
Run Code Online (Sandbox Code Playgroud)

API控制器方法是

public function destroy($assetID)
{
    $asset = Asset::findOrFail($assetID);
    $asset->delete();
}
Run Code Online (Sandbox Code Playgroud)

我的路线是

| GET|HEAD  | api/asset              | asset.index   | App\Http\Controllers\AssetsApiController@index   | api,auth:api                      |
| POST      | api/asset              | asset.store   | App\Http\Controllers\AssetsApiController@store   | api,auth:api,can:create,App\Asset |
| GET|HEAD  | api/asset/create       | asset.create  | App\Http\Controllers\AssetsApiController@create  | api,auth:api,can:create,App\Asset |
| PUT|PATCH | api/asset/{asset}      | asset.update  | App\Http\Controllers\AssetsApiController@update  | api,auth:api,can:update,asset     |
| DELETE    | api/asset/{asset}      | asset.destroy | App\Http\Controllers\AssetsApiController@destroy | api,auth:api,can:delete,asset     |
| GET|HEAD  | api/asset/{asset}      | asset.show    | App\Http\Controllers\AssetsApiController@show    | api,auth:api,can:view,asset       |
| GET|HEAD  | api/asset/{asset}/edit | asset.edit    | App\Http\Controllers\AssetsApiController@edit    | api,auth:api,can:update,asset     |
| GET|HEAD  | assets                 |               | App\Http\Controllers\AssetsController@index      | web                               |                                               
Run Code Online (Sandbox Code Playgroud)

我想我遗漏了一些东西,但我看不到它,门在望远镜中显示为拒绝。唯一奇怪的是serveNova中间件似乎是问题的根源。

时间 2019 年 5 月 8 日上午 10:51:37(14 米前)
主机名 core- hosp
能力删除
结果被拒绝
位置 /home/vagrant/code/nova/src/Http/Middleware/ServeNova.php:25
Request View Request
Tags Auth: 1

Jak*_*kub 5

我在这里描述了我在这个令人厌烦的问题中学到的经验教训:https : //github.com/laravel/framework/issues/22847#issuecomment-521308861。也许有人会发现它很有用。