我在_form.html.erb中有这个:
<%if current_user.role_id == 1 %>
<div class="combo_box">
<%= f.label :subscriber %>
<%= f.collection_select(:user_id, User.all,:id,:name,{:include_blank=>false}, :class => 'styled') %>
</div>
<div class="combo_box">
<%= f.label :group %>
<%= f.grouped_collection_select(:group_id, User.all,:support_agent_groups,:name,:id,:name, {:prompt => "-- Select a group --"}, :class => 'styled') %>
</div>
<div class="combo_box">
<%= f.label :role %>
<%= f.collection_select(:role_id, Role.all,:id,:name,{:include_blank=>false}, {:class => 'styled'}) %>
</div>
<div class="combo_box">
<%= f.label :subscription %>
<%= f.collection_select(:subscription_id, Subscription.all,:id,:name, {:prompt => "-- Select a subscription --"}, {:class=>'styled'}) %>
</div>
<% elsif current_user.role_id == 6 && @user.role_id != 6 %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :subscription_id, :value => current_user.subscription_id %>
<div class="combo_box">
<%= f.label :group %>
<%= f.collection_select(:group_id, SupportAgentGroup.where(:user_id => current_user.id),:id,:name, {:prompt => "-- Select a group --"}, :class => 'styled') %>
</div>
<div class="combo_box">
<%= f.label :role %>
<%= f.collection_select(:role_id, Role.where('id <> ?', 1).where('id <> ?', 6),:id,:name,{:include_blank=>false}, {:class => 'styled'}) %>
</div>
<% elsif current_user.role_id == 6 %>
<%= f.hidden_field :user_id, :value => current_user.id %>
<%= f.hidden_field :role_id, :value => current_user.role_id %>
<%= f.hidden_field :subscription_id, :value => current_user.subscription_id %>
<div class="combo_box">
<%= f.label :group %>
<%= f.collection_select(:group_id, SupportAgentGroup.where(:user_id => current_user.id),:id,:name, {:prompt => "-- Select a group --"}, :class => 'styled') %>
</div>
<% else %>
<%= f.hidden_field :user_id, :value => current_user.user.id %>
<%= f.hidden_field :group_id, :value => current_user.group_id %>
<%= f.hidden_field :subscription_id, :value => current_user.user.subscription_id %>
<%= f.hidden_field :role_id, :value => current_user.role_id %>
<% end %>
我可以在浏览器中使用firebug选项查看每个隐藏字段中的值和检查元素上的值
<input id="user_user_id" type="hidden" value="2" name="user[user_id]" />
我可以将值2
更改为100/200/....
并且在submint上发布新值100/200/...
以保存到db并保存在db中。
我需要检查视图中的所有条件以及控制器中的所有条件以查找合适的默认值..或任何使用hidden_filed来修复此安全问题的选项。
感谢您的帮助......
答案 0 :(得分:2)
不需要传递user_id,您可以从控制器
获取current_user答案 1 :(得分:1)
正如Amar所说,您不需要将用户ID从控制器传递给控制器,因为您可以使用会话变量中的current_user
方法获取它。
请记住,您无法信任从用户收到的数据,一切都可以伪造。