如果用户ID和post user_id匹配,请尝试授权用户更新帖子。我在AuthServiceProvider
中有一个自定义的授权回调函数,用于检查'Authorization'
标题,这是boot()
函数中的API密钥。
$this->app['auth']->viaRequest('api', function ($request) {
if($request->header('Authorization')) {
$user = $this->getUserFromAuthorizationHeader($request);
if (!empty($user)) {
$request->request->add(['userid' => $user->id]);
}
return $user;
}
});
函数getUserFromAuthorizationHeader
获取Request $request
参数并提取Authorization
标头,这是一个api密钥,然后返回一个User
对象。
我定义了一个门update-post
,用于检查从回调中返回的用户以及从控制器调用门update-post
时传递的帖子。
Gate::define('update-post', function($user, $post){
Log::info($user);
return $user->id == $post->user_id;
});
我在PostController
中呼叫门的方式是以下
...
$user = $this->getUserFromRequest($request);
if(Gate::denies('update-post', $post)) {
return response("Unauthorized.", 401);
}
...
我已记录 - using Log:: info()
- 我的Gate中的$user
和$post
变量,我可以成功查看正确的用户并发布传递的对象,但我收到错误{{1我无法理解为什么我会得到它。
答案 0 :(得分:1)
如果你正在获得像这样的数组
,你可能需要在比较之前转换成集合$post = collect($post);
$user = collect($user);
Gate::define('update-post', function($user, $post){
Log::info($user);
return $user->id == $post->user_id;
});
Doc参考