如果所有资源都来自 current_user,我是否需要授权?

Do I need authorization if all resources derive from current_user?

我控制器中的所有 CRUD 操作都是在属于 current_user 的资源上完成的,即经过身份验证的用户。例如

@post = current_user.posts.create(title: "My title")
@posts = current_user.posts.where(archived: false)

当我获得授权后,我可以重定向和记录未经授权的请求,但除此之外 - 实施授权系统(例如 pundit、cancancan 等)是否有任何安全优势?

在像这样简单的情况下,不。

如果您希望记录未经授权的访问,可以通过添加覆盖一两个方法并添加 Rails.logger.warn 'got the bad guy!'.

轻松实现

但是,请考虑以下几点:

您的用户群同时请求编辑 post。

他们还想设置某人可以在 post 上执行的操作。

他们还想建立这样的团队,这些团队有很多组,有很多项目,有很多 posts。

根据您所属的团队、小组、项目,意味着您可以编辑 post。

如果某人属于企业团队并属于主席组,则他们可以执行任何操作,无论如何。

那时,唯一的解决方案是像 cancancanpundit 这样的权限系统,对于动态权限,甚至将权限设为 DB table,遍历它们并生成权限规则。