【问题标题】:Laravel Policy with Spatie Permission check gives 403 for client credentials API request带有 Spatie 权限检查的 Laravel 策略为客户端凭据 API 请求提供 403
【发布时间】:2019-10-28 10:00:12
【问题描述】:

我正在使用 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
方法:获取

当我在控制器构造函数中注释掉 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 请求(使用客户端凭据)的一般做法?

【问题讨论】:

    标签: laravel api laravel-passport laravel-permission


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 2019-02-04
      • 2021-05-18
      • 2022-11-17
      • 2020-01-10
      • 1970-01-01
      • 2018-08-22
      • 2021-12-08
      • 1970-01-01
      相关资源
      最近更新 更多