Rails 3.2, Mass Assignment, Динамические роли? - PullRequest
8 голосов
/ 15 марта 2012

У меня есть приложение Rails с моделью пользователя, которая содержит атрибут admin. Он заблокирован с помощью attr_accessible. Моя модель выглядит так:

attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation
attr_accessible :name, :email, :other_email, :plant_id, :password, :password_confirmation, :admin, :as => :admin

А вот как выглядит мой метод обновления в контроллере пользователя:

def update
  @user = User.find(params[:id])
  if @user.update_attributes(params[:user], :as => current_user_role.to_sym)
    flash[:notice] = "Profile updated"
    redirect_to edit_user_url(@user)
  else
    render 'edit'
  end
end

В моем контроллере приложения есть вспомогательный метод, который возвращает роль в виде строки:

def current_user_role
  @current_user_role ||= current_user.admin? ? "admin" : "default"
end
helper_method :current_user_role

Я также установил config.active_record.whitelist_attributes = true в config/application.rb.

Я убедился, что метод current_user_role возвращает правильное значение в зависимости от статуса администратора текущего пользователя. Rails не выдает ошибку массового присваивания. Но когда я пытаюсь обновить статус администратора пользователя, вошедшего в систему как администратор, Rails выполняет обновление и молча игнорирует атрибут admin. Извлечение записи пользователя в консоли Rails показывает, что запись не была изменена.

У меня ощущение, что в игре есть проблема, специфичная для Ruby или Rails, о которой я не знаю. Я не могу найти информацию о том, как сделать роль динамичной. Лучшее, что я мог найти, было это .

Ответы [ 2 ]

3 голосов
/ 23 июля 2012

В моей модели был ошибочный attr_accessor: admin, который был оставлен после предыдущей попытки заставить это работать.Я упустил это.Удаление исправило это.

Итак, в итоге это довольно простой способ заставить динамические роли работать в Rails 3.2.

0 голосов
/ 15 марта 2012

Похоже, это может быть ошибка в Rails 3.2

https://github.com/stffn/declarative_authorization/issues/127

...