2

我有一个关于 ruby​​ on rails 和使用通过表单传递的 params 变量分配变量的过程的问题

class User
  attr_accessible :available_to_admins, :name
end

假设我有一个仅对我的管理员可用的字段。假设您不是管理员,我不会在您的表单中显示 available_to_admins 输入。

之后,当我想保存您的数据时,我将执行以下操作:

User.update_attributes(params[:user])

如果你是管理员,那么没问题,params[:user] 将包含 name 和 available_tu_admins,如果你不是,那么只有你的名字。

由于 available_to_admins 是一个 attr_accessible 参数,我应该如何防止非管理员用户能够注入包含 available_to_admins 输入的变量及其新值?

4

2 回答 2

2

一种。您可以检查控制器中的用户角色。

class User
  # remove available_to_admins from attr_accessible
  attr_accessible :name
end

def update
  @user = User.new(params[:user])
  @user.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin'
end

湾。您可以在模型中添加 before_save / before_update 回调

class User
  # remove available_to_admins from attr_accessible
  attr_accessible :name
  before_save :check_role
  before_update :check_role
  def check_role
    self.available_to_admins = params[:user][:available_to_admins] if current_user.role == 'Admin'
  end
end
于 2010-04-16T12:11:10.717 回答
0

关于这个主题有一个有趣的 Railscast:

动态 attr_accessible

于 2012-07-21T18:31:22.657 回答