0

在我的用户控制器中,我有一个发布功能,它可以访问用户的子资源。这是通过 /users/{id}/posts 端点访问的。

我希望将请求 URL 中的 $id 传递给 UserPolicy 方法:

public function resource($user, $id)
{
    return $user->id === $id;
}

我的用户控制器方法:

public function posts(Request $request, $id)
{
    $this->authorize('resource', $id);
    return response()->json(['events' => []], 200);
}

有没有办法做到这一点?我注意到 Policy 方法似乎忽略了任何不是对象的东西。

编辑:

我目前正在为此授权使用辅助方法,但想将其移至我的策略以将所有规则保持在一起:

public function authorizeResource($id)
{
    if ((int)$id !== (int)$this->auth->user()->id) {
        throw new \Exception;
    }
}
4

1 回答 1

5

Laravel 需要知道使用哪个策略类。为此,您需要指定模型,在这种情况下,首先传递一个带有 user 实例的数组,然后是$id. Laravel 使用扩展运算符,并将$id作为参数注入你的回调函数。

//UserController.php
public function posts(Request $request, $id)
{
    $this->authorize('resource', [User::class, $id]);
    return response()->json(['events' => []], 200);
}
于 2017-10-12T02:07:23.373 回答