2017-10-12 8 views
0

私のユーザコントローラには、ユーザのサブリソースにアクセスできる投稿機能があります。これは/ users/{id}/postsエンドポイントからアクセスできます。承認用IDを渡すLaravel

私はUserPolicyメソッドにリクエストされたURLから$ IDを渡したい:

public function resource($user, $id) 
{ 
    return $user->id === $id; 
} 

マイUserControllerでの方法:

public function posts(Request $request, $id) 
{ 
    $this->authorize('resource', $id); 
    return response()->json(['events' => []], 200); 
} 

これを行うには、とにかくありますか?ポリシーメソッドはオブジェクトではないものを無視しているようです。

編集:私は現在、この承認のためのヘルパーメソッドを使用していますが、一緒にすべてのルールを維持するために、私のポリシーに移動したいと思い

public function authorizeResource($id) 
{ 
    if ((int)$id !== (int)$this->auth->user()->id) { 
     throw new \Exception; 
    } 
} 

答えて

1

Laravelが知る必要があるポリシー使用するクラス。そのためには、モデルを指定する必要があります。この場合は、まずユーザーのインスタンスを配列に渡してから$idを渡す必要があります。 Laravelはスプレッド演算子を使用し、コールバック関数のパラメータとして$idを挿入します。

//UserController.php 
public function posts(Request $request, $id) 
{ 
    $this->authorize('resource', [User::class, $id]); 
    return response()->json(['events' => []], 200); 
} 
+0

これは魅力的でした。 –

関連する問題