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

时间:2016-12-08 17:05:44

标签: ruby-on-rails authorization pundit cancancan

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

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

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

1 个答案:

答案 0 :(得分:1)

在这种简单的情况下,没有。

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

但是,请考虑以下事项:

您的用户群正在请求同时修改帖子。

他们还希望设置某人可以对帖子执行的操作。

他们还希望设置有许多团队的团队,这些团队有很多项目都有很多帖子。

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

如果有人属于公司团队且属于主席小组,他们可以执行任何操作,无论如何。

此时,唯一的解决方案是cancancanpundit等权限系统,对于动态权限,甚至可以将权限设置为数据库表,循环遍历所有权限并生成权限规则。