在Laravel中哪种方法更好地验证访问方法

时间:2019-02-03 00:57:50

标签: php laravel laravel-5

我有一个博客网站,所有用户都可以发布Blog。我已经了解了Gates,Policy和Middleware。请知道我在Laravel中使用Auth()默认身份验证过程。我想保护用户(A)博客免受其他用户的侵害。

现在我有很多事情可以处理。

使用验证if(Auth()->user->id==$blog->user_id)

使用登机门if(Gate::Allow('blog_protection',$blog))

使用政策if(Auth::user()->cant('blog_protection',$post))

使用中间件$this->middleware('blog_access')

请告诉我是否错误,该函数的含义是处理此请求的最佳方法,以提高可重用性。非常感谢。

1 个答案:

答案 0 :(得分:2)

我会考虑为博客模型资源编写一个策略类。多种原因:

  • 您可以在一个文件中列出与博客相关的所有访问方法,以便于跟踪
  • 您只能在控制器中执行$ this-> authorize('access_method_name',Blog :: class)
  • 您可以将额外的参数传递给该方法以有条件地对其进行过滤

  • 如果您在控制器外部有一个方法,并且需要添加filter(理想情况下,控制器authorize()会将其过滤掉),但仍然可以使用

$user->can() or $user->cant().. 

,它将在内部使用相同的策略。

  • 还可以在刀片指令@can()... @ endcan @cannot ... @ endcannot中使用它

中间件是一种对路由组中指定的每个请求或所有注册为全局中间件组的请求的干预。如果您希望访问过滤器全局适用于所有路由,那么中间件是一个更好的选择。但是对于特定资源,我希望使用策略。

简而言之,用于过滤和处理请求的中间件,而用于管理粒度级访问控制的策略。