首页 > 解决方案 > 带有 Spatie 权限检查的 Laravel 策略为客户端凭据 API 请求提供 403

问题描述

我正在使用 Laravel Policy 并检查使用 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 请求
URL: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 策略需要一个用户模型对象,这就是为什么该策略在我的情况下返回 403 响应。在这些情况下,是否有处理 API 请求(使用客户端凭据)的一般做法?

标签: laravelapilaravel-passportlaravel-permission

解决方案


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

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

推荐阅读