Laravel:如何在嵌套资源控制器上为 API 方法编写策略 class?
Laravel: How can I write a policy class for API methods on a nested resource controller?
我在 User
和 Task
模型之间建立了多对多关系。一个用户属于多个任务,一个任务属于多个用户。我有一个名为 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;
}
}
我在 User
和 Task
模型之间建立了多对多关系。一个用户属于多个任务,一个任务属于多个用户。我有一个名为 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;
}
}