带有Spatie权限检查的Laravel策略为客户端凭据API请求提供了403

时间:2019-06-13 18:38:46

标签: laravel api laravel-passport spatie laravel-permission

我正在使用Laravel策略,并检查使用Spatie的Laravel-Permissions软件包创建的权限。 对于具有客户端凭据的API调用,Controller构造函数中的authorizeResource()返回403。如果将其删除,则返回预期结果。

NpoPolicy.php

public function view(User $user, Npo $npo)
{
    return $user->can('npo.view');
}

NpoController.php

public function __construct()
{
    $this->authorizeResource(Npo::class);
}

api.php

Route::middleware('client')->resource('/npo', 'NpoController');

API请求
网址:https://my-app.dev/api/npo/1
方法:GET

当我注释掉控制器构造函数中的authorizeResource方法时,得到的结果如预期的那样:

{
    "npos": {
        "id":1,
        "name":"Bailey and Sons",
        "contact_person_name":"Mr. Davion Mayert",
        "created_at":"2019-06-13 17:39:25",
        "updated_at":"2019-06-13 17:39:25"
    }
}

我知道Laravel策略需要一个User模型对象,这就是在我的情况下该策略返回403响应的原因。在这种情况下,是否存在处理API请求(使用客户端凭据)的一般做法?

1 个答案:

答案 0 :(得分:0)

您已经错过了authorizeResource函数的第二个参数,因此,在NpoController.php上,将authorizeResource更改为:

$this->authorizeResource(Npo::class, 'npo');