2017-10-12 213 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

感谢您的帮助,这工作的魅力。 –