之前进行Laravel 5用户角色检查

之前进行Laravel 5用户角色检查,laravel,laravel-5.1,Laravel,Laravel 5.1,我很难弄清楚如何正确地做这件事。 我有用户可以创建文章,这些文章可以查看,编辑和删除。如果当前登录的用户不是文章的创建者,我想限制编辑和删除操作。 我已经在表单请求中使用策略和使用Gate完成了这项工作,但如果我理解正确,FormRequest仅适用于POST请求。目前,我将FormRequest作为参数传递给getEdit()操作。这似乎是错误的 那么,我如何确保用户既不能访问也不能编辑文章呢?如果您已经定义了一个策略,您可以在控制器操作中使用Gatefacade直接访问它,如下所示: pub

我很难弄清楚如何正确地做这件事。 我有用户可以创建文章,这些文章可以
查看
编辑
删除
。如果当前登录的用户不是文章的创建者,我想限制编辑和删除操作。 我已经在表单请求中使用策略和使用Gate完成了这项工作,但如果我理解正确,FormRequest仅适用于POST请求。目前,我将FormRequest作为参数传递给getEdit()操作。这似乎是错误的


那么,我如何确保用户既不能访问也不能编辑文章呢?

如果您已经定义了一个策略,您可以在控制器操作中使用
Gate
facade直接访问它,如下所示:

public function getEdit($id)
{
    $reference = Reference::findOrFail($id);

    if (Gate::denies('owns-reference', $reference))
        abort(403);

    return view('reference.edit')
           ->with('reference', $reference);
}
只需确保在文件顶部包含
,如下所示:

public function getEdit($id)
{
    $reference = Reference::findOrFail($id);

    if (Gate::denies('owns-reference', $reference))
        abort(403);

    return view('reference.edit')
           ->with('reference', $reference);
}

使用门

是的,如果可能的话,我不想在我的控制器中使用这种逻辑王。我可以用中间件做类似的事情吗?因为我必须编写两次相同的代码(在getEdit()和postEdit()中),我不会使用中间件。因为不同的模型可能有不同的角色,所以每次都需要不同的中间件。正如Thomas Kim在对您的问题的评论中指出的那样:在get请求中使用Request类没有什么错。看看这个:我认为使用表单请求获取请求没有错。使用中间件将是一个不错的选择。创建一个中间件并检查其中的用户角色。通过中间件处理所有这些路由。