为授权传递一个 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);
}