Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 限制未授权用户在API终结点上的更新_Php_Laravel_Laravel 5.6 - Fatal编程技术网

Php 限制未授权用户在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

我已经使用API资源和Passport构建了一个仅API的应用程序进行身份验证。该应用程序执行以下操作

  • 允许所有人列出所有书籍并查看特定书籍
  • 仅允许登录用户添加、更新和删除属于他们的书籍
  • 使用postman,除了更新和删除操作外,该应用程序按预期工作。如果用户试图更新不属于他们的书籍,我希望返回错误响应。不幸的是,我得到的是200 Ok状态码,而不是我的自定义消息和403状态码。删除也是一样的

    这是我的BookController更新和删除方法

    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);
    }
    

    我还建议研究策略,并将它们作为中间件应用于路由

    发现错误时,我没有返回错误响应。发现错误时,我没有返回错误响应。我想。谢谢,切菲。谢谢,长官