我正在使用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请求(使用客户端凭据)的一般做法?
答案 0 :(得分:0)
您已经错过了authorizeResource函数的第二个参数,因此,在NpoController.php上,将authorizeResource更改为:
$this->authorizeResource(Npo::class, 'npo');