为授权传递一个 id Laravel
Pass in an id for Authorization Laravel
在我的用户控制器中,我有一个帖子功能,可以访问用户的子资源。这是通过 /users/{id}/posts 端点访问的。
我想将请求 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;
}
}
Laravel 需要知道要使用哪个策略 class。为此,您需要指定模型,在本例中,首先传递一个包含用户实例的数组,然后传递 $id
。 Laravel 使用扩展运算符并将 $id
作为回调函数的参数注入。
//UserController.php
public function posts(Request $request, $id)
{
$this->authorize('resource', [User::class, $id]);
return response()->json(['events' => []], 200);
}
在我的用户控制器中,我有一个帖子功能,可以访问用户的子资源。这是通过 /users/{id}/posts 端点访问的。
我想将请求 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;
}
}
Laravel 需要知道要使用哪个策略 class。为此,您需要指定模型,在本例中,首先传递一个包含用户实例的数组,然后传递 $id
。 Laravel 使用扩展运算符并将 $id
作为回调函数的参数注入。
//UserController.php
public function posts(Request $request, $id)
{
$this->authorize('resource', [User::class, $id]);
return response()->json(['events' => []], 200);
}