Laravel:如何在嵌套资源控制器上为 API 方法编写策略 class?

Laravel: How can I write a policy class for API methods on a nested resource controller?

我在 UserTask 模型之间建立了多对多关系。一个用户属于多个任务,一个任务属于多个用户。我有一个名为 task_user 的枢轴 table。

在我的 API 中,我有一条定义如下的路线:

Route::get('/users/{user}/tasks', 'TaskUserController@all');

我想编写一个策略来强制当前登录的用户 auth()->user 是路由中被请求的用户。基本上一个用户只能查看自己的任务。

如何为嵌套资源控制器 TaskUserController 编写策略 class?

您的资源嵌套与制定政策无关。

制定您的 UserPolicy。

class UserPolicy()
{
    public function view(User $authorizedUser, User $user) {
        return $authorizedUser->is($user);
    }
}

在您的控制器中,您可以使用 authorize() 助手授权操作。或者,它可以在您的表单请求中使用 Auth::user()->can().

执行
class TaskController {
    public function all(User $user)) {
        $this->authorize('view', $user);

        return $user->tasks;
    }
}