0

我在 _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]" />

我可以将值更改2100/200/....

并在提交时发布新值100/200/...以保存到数据库并保存在数据库中。

我是否需要检查视图中的所有条件以及控制器中的所有条件以找到合适的默认值..或使用 hidden_​​filed 解决此安全问题的任何选项。

谢谢你的帮助...

4

2 回答 2

2

不不需要传递user_id,你可以从控制器获取current_user

于 2012-10-03T06:19:59.097 回答
1

正如 Amar 所说,您不需要将用户 ID 从控制器传递到控制器,因为您可以使用current_user会话变量中的方法获取它。

请记住,您不能相信从用户那里收到的数据,一切都可以伪造。

于 2012-10-03T06:22:57.003 回答