ruby on Rails 参数注入

发布于 2024-08-29 07:19:33 字数 526 浏览 7 评论 0原文

我有一个关于 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 输入及其新值的变量?

I have a question about ruby on rails and the process of assigning variables using the params variable passed through a form

class User
  attr_accessible :available_to_admins, :name
end

Let's say that I have a field that is only available to my admins. Assuming that you are not an admin, I am going to not display the available_to_admins input in your form.

After that, when I want to save your data I'll just do a:

User.update_attributes(params[:user])

If you are an admin, then no problem, the params[:user] is going to contain name and available_tu_admins and if you're not then only your name.

Since the available_to_admins is an attr_accessible parameter, how should I prevent non admin users from being able to inject a variable containing the available_to_admins input with their new value?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

甜中书 2024-09-05 07:19:33

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

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

b.您可以将 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

a. You can check user role in controller.

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

b. You can add before_save / before_update callbacks to your model

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
能怎样 2024-09-05 07:19:33

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

dynamic attr_accessible

There was an interesting Railscast on this topic:

dynamic attr_accessible

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文