阻止更改活动记录ID的最佳方法

时间:2015-11-26 00:06:21

标签: ruby-on-rails forms security

当我构建一个具有不同授权的系统时,除了将相应的用户信息存储在活动记录中并在提交后进行检查之外,是否有任何好方法可以阻止用户更改内部的一些关键信息(例如,记录ID)形成?

(即用户将无法更改他们所拥有的那些记录)

1 个答案:

答案 0 :(得分:2)

正如@sjagr已经在评论中说:你必须使用Strong Parameters

示例:

您的模型User包含idfirstnamelastnameemail。用户应该只能更新名字和姓氏。

您的观点:

<%= form_for @user do |f| %>
  <%= f.text_field :firstname %>
  <%= f.text_field :lastname %>
  <%= f.submit %>
<% end %>

您的控制器:

before_action :set_user

def edit
end

def create
  if @user.update user_params
     # Set success message
     # redirect to proper site
  else
     # Set error
     render :edit
  end
end


private

def set_user
  @user = User.find(params[:id])    # Rescue against ActiveRecord::RecordNotFound error
end

def user_params
  params.require(:user).permit(:firstname, :lastname)   # Here the strong parameters stuff happens
end

如果您想允许更多参数,只需将它们添加到permit方法调用中即可。