如果所有资源都来自 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。
如果某人属于企业团队并属于主席组,则他们可以执行任何操作,无论如何。
那时,唯一的解决方案是像 cancancan
或 pundit
这样的权限系统,对于动态权限,甚至将权限设为 DB table,遍历它们并生成权限规则。
我控制器中的所有 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。
如果某人属于企业团队并属于主席组,则他们可以执行任何操作,无论如何。
那时,唯一的解决方案是像 cancancan
或 pundit
这样的权限系统,对于动态权限,甚至将权限设为 DB table,遍历它们并生成权限规则。