Модель пользователя, attr_accessible и admin - PullRequest
0 голосов
/ 14 февраля 2012

Я создаю простое приложение в стиле блога. Мне действительно нужны только пользователи с правами администратора и без него, так что, похоже, достаточно иметь простой столбец в пользовательской модели с именем admin (логическое значение).

Я сейчас использую Devise для авторизации, и мне добавили столбец администратора. Я пытаюсь настроить своего администратора по умолчанию (себя) в seeds.rb, однако администратор выглядит как false, если я не добавлю столбец администратора в attr_accessible. Однако, похоже, что это будет проблемой безопасности, и я обычно не хочу, чтобы пользователи-администраторы могли быть созданы, кроме как другим администратором. Какой правильный и безопасный способ сделать это?

Ответы [ 2 ]

2 голосов
/ 14 февраля 2012

Вы хотите обработать настройку логического значения admin внутри.Не подвергайте его массовому назначению.

У вашей пользовательской модели по умолчанию для первого пользователя (вас) автоматически назначается администратор.Используйте метод before_create для этого ...

# models/user.rb
before_create :make_first_user_an_admin

def make_first_user_an_admin
  self.admin = self.class.count == 0 # sets true if no users exist, false otherwise
end

Затем используйте метод экземпляра для установки администрирования ...

# models/user.rb
def toggle_admin
  self.admin = !self.admin
  save
end

охраните этот метод в вашем контроллере ...

# controllers/users_controller.rb
def change_adminship
  if current_user.admin
    @user.toggle_admin
  else
    raise "Can't do that."
  end
end
0 голосов
/ 14 февраля 2012

Вы очень правильно оставляете admin как не attr_accessible, это просто отключает настройку через массовое назначение.Вы все еще можете установить admin в свои семена, установив его в единственном числе.Пример:

user = User.new(:name => 'joe') ...
user.admin = true
user.save
...