2017-10-12 211 views
0

在我的用戶控制器中,我有一個posts函數,它可以訪問用戶的子資源。這是通過/ users/{id}/posts端點訪問的。通過身份驗證Laravel

我想從請求URL中的$ id進入一個UserPolicy方法:

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

感謝您的幫助,這工作的魅力。 –