Lumen 授权 - 调用数组的成员函数 parameter()

Lumen Authorization - Call to a member function parameter() on array

尝试授权用户更新 post 如果用户 ID 和 post user_id 匹配。我在 AuthServiceProvider 中有一个自定义的授权回调,它检查 'Authorization' header,这是 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参数,提取出Authorizationheader,这是一个api键,然后returns一个Userobject.

我定义了一个门 update-post,它检查从回调返回的用户和​​从控制器调用门 update-post 时传递的 post。

Gate::define('update-post', function($user, $post){
            Log::info($user);
            return $user->id == $post->user_id;
        });

我在 PostController 中调用 Gate 的方式如下

...
$user = $this->getUserFromRequest($request);
        if(Gate::denies('update-post', $post)) {
            return response("Unauthorized.", 401);
        }
...

我在我的 Gate 中记录了 - using Log:: info() - $user$post 变量,我可以成功地看到正确的用户和 post objects正在通过,但我收到错误 Call to a member function parameter() on array 并且我不明白为什么我会得到它。

如果你得到这样的数组,你可能需要在比较之前转换成集合

$post = collect($post);
$user = collect($user);
Gate::define('update-post', function($user, $post){
            Log::info($user);
            return $user->id == $post->user_id;
        });

Doc参考