2017-09-25 8 views
3

ユーザIDと投稿user_idが一致すると、ユーザに投稿を更新する権限を与えようとしています。私はAuthServiceProviderの承認のためにカスタムコールバックを持っています。これは、boot()機能のAPIキーである'Authorization'ヘッダーをチェックします。ルーメンの承認 - 配列のメンバ関数のパラメータ()への呼び出し

$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; 
      } 
     }); 

機能getUserFromAuthorizationHeaderRequest $requestパラメータを取得し、APIキーであるAuthorizationヘッダを抽出し、次いでUserオブジェクトを返します。

コントローラからゲートウェイupdate-postを呼び出すときに、コールバックから返されたユーザーとポストが渡されたことを確認するゲートupdate-postを定義しました。 using Log:: info()を - - 私は私のPostControllerに門を呼び出しています

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

方法は、以下の

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

である私は、ログインして私の門で$user$post変数と私は正常に正しいユーザーを見ることができますし、投稿オブジェクトは渡されますが、私はエラーCall to a member function parameter() on arrayを取得し、なぜ私はそれを取得しているのか理解できません。

+0

のような配列を取得している場合と比較する前のコレクションに変換する必要があり –

+0

@ Mr.Pyramid私はコード内のどこにでも 'parameter()'を呼び出すことはありません。 – qasimalbaqali

+0

は '$ user'のように見え、' $ post'は配列型ではありませんか? –

答えて

1

あなたはおそらく、あなたが `パラメータ()`あなたの質問に、私はそれを見つけることができません。この

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

Docリファレンス