2017-10-12 13 views
0

내 사용자 컨트롤러에 사용자의 하위 리소스에 대한 액세스 권한을 부여하는 posts 기능이 있습니다. 이것은/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

도움을 주셔서 감사합니다. –