当我构建一个具有不同授权的系统时,除了将相应的用户信息存储在活动记录中并在提交后进行检查之外,是否有任何好方法可以阻止用户更改内部的一些关键信息(例如,记录ID)形成?
(即用户将无法更改他们所拥有的那些记录)
答案 0 :(得分:2)
正如@sjagr已经在评论中说:你必须使用Strong Parameters。
示例:
您的模型User
包含id
,firstname
,lastname
,email
。用户应该只能更新名字和姓氏。
您的观点:
<%= 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
方法调用中即可。