流明授权 - 在数组上调用成员函数parameter()

时间:2017-09-25 13:41:26

标签: php lumen

如果用户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我无法理解为什么我会得到它。

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参考