【问题标题】:Laravel 5 user role check beforeLaravel 5 用户角色检查之前
【发布时间】:2015-12-01 17:54:46
【问题描述】:

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

那么我怎样才能确保用户既不能访问也不能编辑文章呢?

【问题讨论】:

  • 我认为将表单请求用于 GET 请求没有任何问题。
  • 使用中间件将是一个不错的选择。创建一个中间件并在那里检查用户角色。通过中间件处理所有这些路由。

标签: laravel laravel-5.1


【解决方案1】:

如果您已经定义了一个 Policy,您可以使用控制器操作中的 Gate 外观直接访问它,如下所示:

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

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

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

只需确保在文件顶部包含Gate,如下所示:

use Gate;

【讨论】:

  • 是的,如果可能的话,我希望我的控制器中没有这个逻辑之王
  • 我可以用中间件做类似的事情吗?
  • 因为我必须写两次相同的代码(在 getEdit() 和 postEdit() 中)
  • 我不会使用中间件。由于您可能对不同的模型有不同的角色,因此每次都需要不同的中间件。正如 Thomas Kim 在对您的问题的评论中指出的那样:在 get 请求中使用 Request 类没有任何问题。看看这个:laravel.com/docs/5.1/authorization#within-form-requests
猜你喜欢
  • 2013-11-10
  • 2016-08-28
  • 1970-01-01
  • 1970-01-01
  • 2019-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
相关资源
最近更新 更多