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]" />

2を変更できる場所100/200/....

サブミントでは、新しい値100/200/...が db に保存するために投稿され、db に保存されました。

ビューとコントローラーですべての条件をチェックして、適切なデフォルト値を見つける必要がありますか..またはhidden_​​filedを使用してこのセキュリティの問題を修正するオプション.

助けてくれてありがとう...

4

2 に答える 2

2

user_idを渡す必要はありません。コントローラーからcurrent_userを取得できます。

于 2012-10-03T06:19:59.097 に答える
1

Amar が言うように、ユーザー ID をコントローラーからコントローラーに渡す必要はありません。これcurrent_userは、セッション変数のメソッドでユーザー ID を取得できるためです。

ユーザーから受け取ったデータは信頼できないことに注意してください。すべてが偽造される可能性があります。

于 2012-10-03T06:22:57.003 に答える