Лучший способ разрешить администратору создавать объекты для администратора - PullRequest
0 голосов
/ 20 января 2011

Моя цель - предоставить Администраторам право подписать Пользователей на Проект .

В настоящее время Пользователей могут подписаться на Проекты .

Поэтому я подумал, чтобы позволить Администратору сделать это .. сделать что-то вроде этого:

хамл

= link_to "Project Signup", card_signups_path + "?user=#{user.id}", :class => "button"

И передать параметры [: user], чтобы я мог заменить этот контроллер следующим образом:

if params[:user]
  @card_signup = User.find(params[:user]).build_card_signup
else
  @card_signup = current_user.build_card_signup
end

Проблема в том, что ... это регистрация из 3 частейпроцесс и его загруженный VIA AJAX, поэтому я не могу передать ?user=#{user.id} ни на одном из шагов после первого .. (по крайней мере, не в соответствии с тем же соглашением, которое я уже сделал, или знаю, как)

Какую стратегию вы бы использовали в этом?

1 Ответ

1 голос
/ 20 января 2011

Один из возможных способов сделать это - добавить в форму скрытое поле, которое отражает параметр, который вы передали, если он найден.

Таким образом, если параметр, который вы передаете, является пользователем, по вашему мнению, вы хотите добавить скрытое поле, например:

<input type="hidden" name="user" and value="<%= params[:user] %>" />

или с помощником по рельсам:

hidden_field_tag 'user', params[:user]

Таким образом, код в вашем контроллере может проверять этот параметр на каждом шаге на принимающей стороне и знать, для кого сохранить объект. Примерно так:

def create 
   @card_signup = CardSignup.new(params[:card_signup])
   if params[:user] && params[:user].to_i > 0
     ##
     ##some logic here to make sure current_user is admin, as no one else is allowed to do this
     ##
     @card_signup.user_id = params[:user]
   else
     @card_signup.user_id = current_user.id
   end
   ##onto validating model and saving / redirecting / etc
end

Но конечной целью здесь является сохранение параметров пользователя, будь то начальный параметр GET для страницы или Put / Post из ajax / etc для отправки формы, этот параметр будет около.

Еще один угол безопасности, который нужно проверить, также будет в «новом» действии этого контроллера, и проверьте, что если присутствует параметр пользователя, то current_user является администратором, в противном случае перенаправьте или отобразите сообщение об ошибке. Это в сочетании с повторной проверкой этого при создании должно обеспечить достойный способ убедиться, что никто другой не сможет сделать эти запросы. Вы также можете поместить это в before_filter и вызвать его только для нового и создать, чтобы сохранить вещи в чистоте.

...