Php Laravel-补丁功能的授权

Php Laravel-补丁功能的授权,php,laravel,Php,Laravel,我有这个补丁功能,但我需要添加某种形式的授权,以确保您只能编辑/更新与当前用户相关的影片。我可以获得有关如何添加此功能的帮助吗 控制器功能: public function update(string $id) { $this->user = Auth::user(); $this->film = film:findOrFail($id); return $this->film->toJson(); } 我在validation部分查看了la

我有这个补丁功能,但我需要添加某种形式的授权,以确保您只能编辑/更新与当前用户相关的影片。我可以获得有关如何添加此功能的帮助吗

控制器功能:

 public function update(string $id)
{
    $this->user = Auth::user();
    $this->film = film:findOrFail($id);

    return $this->film->toJson();
}
我在validation部分查看了laravel文档,并看到了这个示例

 $validatedData = $request->validate([
    'title' => 'required|unque:posts|max:255',
    'body' => 'required',
]);
然后我在文件的顶部添加了我自己的验证

protected $validation = [
    'name' => 'string',
    'description' => 'new description'
];

我对如何实现授权以确保只有当前用户才能更新电影有点迷茫?

好的,基本上,为了以简单的方式实现您需要的功能,您可以做的是:

首先将“用户id”传递给控制器

public function update(string $id, $userid)
{
    $user = Auth::user();
    $id = $user->id;
    if($id == $userid)
    {
        $this->user = Auth::user();
        $this->film = film::findOrFail($id);

        return $this->film->toJson();
    }else{
        return "Not Authorized";
    }

}

如果我没有误解你的问题,这基本上只允许用户谁登录更新他的电影。如果他进入任何其他配置文件,id将不匹配,从而返回未授权提示

您需要的不是表单验证,而是用户授权(如注释中所示)。所以你应该看看这个。在您的情况下,您应该编写一份类似以下内容的
FilmPolicy
(我将跳过注册部分…从文档中可以很容易理解):

类策略{
/**
*确定用户是否可以更新给定的胶片。
*
*@param\App\User$User
*@param\App\Post$Post
*@returnbool
*/
公共功能更新(用户$User,电影$Film)
{
返回$user->id===$film->user_id;//或任何外键
}
}
然后,您应该更新控制器,以便按如下方式处理授权:

公共函数更新(字符串$id)
{
$this->film=film::findOrFail($id);
$this->authorize('update',$this->film);
返回$this->film->toJson();
}

由于此方法只是抛出一个异常,因此您可以得到一个更详细的响应,正如所解释的那样

我不完全确定您在问什么,但通常$validation/$request->validate用于表单验证。如果要验证用户验证,可以将用户id传递到函数/公共函数更新($userid),并将其与Auth::user()进行比较。从这里筛选出与此用户关联的所有用户,瞧,你有你的解决方案。因此,我认为你寻找的更多是权限,而不是验证:)是的,不用担心!你是拉威尔的新手。但是是的,我想你在寻求许可。您可以在此处手动允许权限传递。基本上使用if-else语句来实现,我将在下面发布它,以便您可以看到如何处理它的示例。您是一个明星。感谢您的快速响应和帮助!很抱歉成为一个noob,并解释错了。别担心,也请参考@ilgala的答案,当您有时间研究它时,它会更好地了解用户授权。我使用的方法基本上是一种黑客手段