2016-08-10 29 views
0

我在理解在Laravel中使用ACL或中间件的正确时间方面有点麻烦。我确实了解他们的网站和Laracasts上的例子,但它们是相当简单的例子。Laravel中的权限 - ACL vs中间件

这不是任何复杂的手段,但我没有看到这些例子。假设我有两条允许用户创建任务的路线。第一个是要求填写信息的GET,第二个是存储信息的POST。有些用户不允许根据角色创建任务。在这两种情况下,都没有一个特定的对象存在,这就是ACL所要求的,据我所知。那么我会用中间件来做那样的事情吗?而当一个对象存在时,使用ACL呢?

另一个我一直试图适应的方式是使用Form Requests,但是之后我必须为每个路径创建一个Form Request对象(虽然我个人不介意)。

当没有特定的行动来采取行动时,限制行动的好方法是什么?

在此先感谢。

回答

1

注意事项:我打算发表评论,但它有点过分。随时等待更好的答案,也许考虑这只是一个评论。

我认为你错过了这里的要点。您可以有一个middleware咨询ACL,或者您可以使用FormRequest咨询ACL或单独使用它们中的每一个。例如,在CreateTaskRequestauthorize方法中,您可以检查ACL以查看用户是否具有创建任务的适当角色。

当Jeff试图检查用户owns帖子时,您可能会觉得太过兴奋。这种ACL是面向记录的,但是你可以拥有一个只将用户作为参数的角色(而不是其他实体),并查看该用户是否具有特定角色。通过返回true,该操作被授权,否则将被拒绝。

中间件有更多的与路线,而不是请求。您也可以有一个中间件来获取已认证的用户,并检查它是否具有创建任务的角色。这些是实现相同目标的不同方式(这是Laravel的好处之一,有很多方法可以实现相同的目标)。

您要采取的具体行动是“创建新任务”操作。你想要谁能做到这一点?拥有角色管理员的用户?拥有create-task权限的用户?

在一天结束的时候,我会考虑的是:

  • 是否有很多,将有相同的规则路线?也许中间件将是一个不错的选择。
  • 每种操作都有具体规则吗?没有创建任务的用户可以编辑吗?形式要求可能更容易实现这种规格
  • 哪个$this环境会让我的生活更轻松? $this from Form Request or $this from middleware?

我从杰夫的课程中学到的一件事是他教了很多很酷的东西,有时我最终失去了一两点。尝试再次重新观察基本步骤,也许会停下来,当你觉得你发现了一些可行的事情。然后实现它,看看你的情况与他的不同,以及你认为他会怎样写这个功能。