Laravel中的权限- ACL与中间件



我在理解在Laravel中使用ACL或中间件的适当时间有点麻烦。我确实理解他们网站和laracast上的例子,但它们都是相当简单的例子。

无论如何这都不再复杂了,但是我没有看到这些例子。假设我有两个允许用户创建任务的路由。第一个是填写信息的GET请求,第二个是存储信息的POST请求。有些用户不允许根据他们的角色创建任务。在这两种情况下,都不存在特定的对象,据我所知,这是ACL所需要的。那么我会使用中间件来实现这些吗?对象存在时,使用ACL吗?

我一直在尝试的另一种选择是使用表单请求,但这样我就必须为每个路由创建一个表单请求对象(尽管我个人并不介意)。

当没有特定的操作可执行时,限制对操作的访问的好方法是什么?

注意:我本来打算把这篇文章作为评论发表的,但是它有点太过火了。请随意等待更好的答案,也许这只是一个评论。

我认为你没有抓住重点。你可以有一个middleware来咨询ACL,或者你可以使用FormRequest来咨询ACL,或者分别使用它们。例如,在CreateTaskRequestauthorize方法中,您可以检查ACL,以查看用户是否具有创建任务的适当角色。

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

中间件更多地处理路由而不是请求。您还可以使用中间件获取经过身份验证的用户,并检查其是否具有创建任务的角色。这些是实现同一目标的不同方法(这是Laravel的好处之一,有很多方法来实现同一个目标)。

您要执行的具体操作是"创建新任务"操作。你希望谁能做到这一点?拥有角色管理器的用户?具有create-task ?权限的用户

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

  • 是否有很多路由将有相同的规则?也许中间件是个不错的选择。
  • 每一种操作都有具体的规则吗?未创建任务的用户是否能够编辑任务?表单请求可能更容易实现这种规范
  • 哪个$this环境会让我的生活更轻松?$thisForm Request$this从中间件?

我从Jeff的课上学到的一件事是他教了太多很酷的东西,有时我最终会错过一两分。试着再看一遍基本步骤,也许当你认为你找到了可行的方法时就停下来。然后执行它,看看你的情况与他的不同之处,以及你认为他会如何编写该功能。

最新更新