2015-06-24 4 views
1

Мой url выглядит примерно так username/project/project_members Пользователь имеет много проектов, также существует богатое множество отношений между пользователями и проектами через членов проекта. Подумайте об этом как github, у пользователя много репозиториев, и у репо есть много соавторов в качестве пользователей.Сильные параметры

Теперь, чтобы сделать новый объект ProjectMember, я могу сделать массовое назначение:

ProjectMember.create(user_id: params[:user_id], project_id: @project.id, role: params[:project_member][:role]) 

или я могу сделать:

@project.members << @member 
@project.member_project(role: params[:project_member][:role]) 

Как вы можете сказать, в обоих случаях мне нужно найти Сначала объекты @project и @member. Чтобы найти @member, я уже передаю user_id как скрытую, и я нахожу @project с моим url (см. Выше). Моя форма выглядит так:

- @users.each do |user| 
    = form_tag user_project_project_members_add_path(@project.user, @project) do 
    = label_tag 'username', user.username 
    = hidden_field_tag "user_id", user.id 
    = select('project_member', 'role', roles) 
    = submit_tag 'Add', :name => nil 

Этот тип кода оставляет сильные параметры бесполезными. т.е. я не использую его для создания моего нового экземпляра project_member. Должен ли я быть обеспокоен тем, что я не пользуюсь сильными параметрами? Я предполагаю, что одним из хаков может быть то, что я передаю project_id как скрытое поле. Должен ли я наклоняться назад, чтобы я мог использовать сильные параметры?

ответ

0

Вид массового назначения, что приводит к уязвимости, когда вы делаете:

User.create(params[:user]) 

А потом malicous пользователь должен пройти { user: { name: 'Haxxor', admin: true }} и все ваше приложение находится под угрозой.

До Rails 4, Rails с радостью позволили бы вам это сделать.

Там нет никакой реальной опасности в этом:

ProjectMember.create(
    user_id: params[:user_id], 
    project_id: @project.id, 
    role: params[:project_member][:role] 
) 

Даже если вы создаете ProjectMember с хэша вы фактически вручную назначая параметров для каждого атрибута.

+0

gotcha! Благодарю. – sonalkr132

Смежные вопросы