RoR网络应用程序

时间:2016-02-03 20:57:55

标签: ruby-on-rails security

我即将推出我的第一个网站,我担心安全问题。我一直看到的前两个角色/权限宝石是针对RoR网络应用程序的cancancan和pundit。与我自己的家用滚动版相比,这些包有明显的优势吗?

为了减少我的版本:我有一个用户,角色和user_role模型,其中user_role是包含多对多关系的连接表。我通过roles_controller与

分配/更改角色
def change
  @role = Role.find(params[:id])
  @user = User.find params[:user_id]

  # if user is assigned to be a student, delete all other roles
  if @role.name == 'student'
    @user.roles.each do |role|
      @user.roles.delete Role.find(role.id)
    end
  end

  # if user is assigned to be a teacher, delete student (if present)
  if @role.name == 'teacher' && @user.has_role?('student')
    @user.roles.delete Role.where(name: 'student')
  end

  @user.roles << @role if request.patch?
  @user.roles.delete @role if request.delete?

  redirect_to @user
end

控制器有before_action :admin_user,因此只有管理员可以执行这些操作。另外,我根据角色,登录用户和正确的用户,为不同控制器中的每个角色提供了各种before_actions。这个实现是否需要注意一些可能的安全问题?

1 个答案:

答案 0 :(得分:0)

主要优点是他们不是你家的一次性滚动。 CanCanCan和Pundit已被用于数十个应用程序中,并且经过了长时间的战斗测试,并且拥有一个庞大的社区,他们都在努力解决这些问题并将其视为缺陷 - 你能否真诚地说你将为你的解决方案做同样的事情?

CanCanCan和Pundit也是授权库 - 它们可用于构建基于角色的授权 - 但角色不是内置的一部分。

如果你想要一个角色库的gem看看Rolify,那么创建链接到用户和资源的角色非常简单。它可以与CanCanCan,Pundit或任何其他授权库一起使用。