laravel - 带有 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 请求(使用客户端凭据)的一般做法?
解决方案
您错过了 authorizeResource 函数的第二个参数,因此,在 NpoController.php 将 authorizeResource 更改为:
$this->authorizeResource(Npo::class, 'npo');
推荐阅读
- c - 重新分配后访问数组位置的分段错误
- javascript - 如何在蚂蚁表中格式化日期?
- postgresql - PostgreSQL MIN 和 MAX 函数不返回一个结果
- python - Python:指定与继承一起使用的类方法的返回类型
- arrays - 从数组中取消大小时,Rust 如何确定切片的长度?
- php - Wordpress add_filter 'template_include' 不起作用
- windows - 基于多个文件名批量创建多个文件夹,并将多个相关文件移动到创建的文件夹中
- scala - scalaz 怎么能做“A \/ B”,我怎么能做我自己的“B.??” 或“A B”
- python - Django MoneyField:MoneyField 的值无效
- javascript - 执行一个shell脚本,在它发生时打印输出,并阻塞直到它完成?