Php 限制未授权用户在API终结点上的更新
我已经使用API资源和Passport构建了一个仅API的应用程序进行身份验证。该应用程序执行以下操作Php 限制未授权用户在API终结点上的更新,php,laravel,laravel-5.6,Php,Laravel,Laravel 5.6,我已经使用API资源和Passport构建了一个仅API的应用程序进行身份验证。该应用程序执行以下操作 允许所有人列出所有书籍并查看特定书籍 仅允许登录用户添加、更新和删除属于他们的书籍 使用postman,除了更新和删除操作外,该应用程序按预期工作。如果用户试图更新不属于他们的书籍,我希望返回错误响应。不幸的是,我得到的是200 Ok状态码,而不是我的自定义消息和403状态码。删除也是一样的 这是我的BookController更新和删除方法 public function update(Re
public function update(Request $request, Book $book)
{
// Update book if the logged in user_id is the same as the book user_id
if ($request->user()->id === $book->user_id) {
$book->update($request->only(['title', 'author']));
return new BookResource($book);
} else {
response()->json(['error' => 'You do not have the permission for this operation'], 403);
}
}
public function destroy(Request $request, Book $book)
{
// Delete book only if user_id matches book's user_id
if ($request->user()->id === $book->user_id) {
$book->delete();
return response()->json(null, 204);
} else {
response()->json(['error' => 'You do not have the permission for this operation'], 403);
}
}
注意:在postman中测试时,我只需在headers authorization字段中添加承载令牌。当用户拥有该书,但当该书不属于登录用户时,获得200而不是403状态代码时工作
我做错了什么?我如何修复它?您似乎没有在
else
语句中返回您的响应-您可以将其简化为:
公共功能更新(请求$Request,Book$Book)
{
//如果登录的用户id与图书用户id相同,则更新图书
如果($request->user()->id===$book->user\u id){
$book->update($request->only(['title','author']);
返回新的BookResource($book);
}
返回响应()->json([
'错误'=>'您没有此操作的权限'
], 403);
}
公共功能销毁(请求$Request,Book$Book)
{
//仅当用户id与书本的用户id匹配时才删除书本
如果($request->user()->id===$book->user\u id){
$book->delete();
return response()->json(null,204);
}
return response()->json(['error'=>'您没有此操作的权限'],403);
}
我还建议您研究策略,并将其作为中间件应用于路由您似乎没有在
else
语句中返回您的响应,您可以将其简化为:
公共功能更新(请求$Request,Book$Book)
{
//如果登录的用户id与图书用户id相同,则更新图书
如果($request->user()->id===$book->user\u id){
$book->update($request->only(['title','author']);
返回新的BookResource($book);
}
返回响应()->json([
'错误'=>'您没有此操作的权限'
], 403);
}
公共功能销毁(请求$Request,Book$Book)
{
//仅当用户id与书本的用户id匹配时才删除书本
如果($request->user()->id===$book->user\u id){
$book->delete();
return response()->json(null,204);
}
return response()->json(['error'=>'您没有此操作的权限'],403);
}
我还建议研究策略,并将它们作为中间件应用于路由发现错误时,我没有返回错误响应。发现错误时,我没有返回错误响应。我想。谢谢,切菲。谢谢,长官