Rails seed.rb от имени администратора

Я развернул собственную систему аутентификации / авторизации на основе Hartl для своего приложения. Я хотел разрешить администраторам делать других пользователей администраторами, поэтому я сделал это в своем файле user.rb:

attr_accessible :name, :email, :password, :password_confirmation, :order_id
attr_accessible :name, :email, :password, :password_confirmation, :order_id, :admin, :as => :administrator

и поместите это в мое действие обновления пользователя:

def update
   if current_user.admin?
      if @user.update_attributes(params[:user], :as => :administrator)

Это отлично работает для меня, но становится неприятно заходить в консоль и вводить

User.find(2).toggle!(:admin)

или что-то еще, всякий раз, когда я хочу сделать своим первым пользователем-администратором после сброса базы данных, или, если на то пошло, использовать консоль или отдельные изменения для внесения других администраторов. Мне бы очень понравилось, если бы я мог засеять ": as => administrator", поэтому я попробовал это в моем файле seed.rb, но он не работает (ошибка массового назначения):

    admin = User.create(
    :name => "My Name",
    :email => "my email",
    :password => "password",
    :password_confirmation => "password",
    :admin => true,
    :as => :administrator
)

Есть идеи, есть ли способ сделать это? Это сделало бы мою жизнь намного проще.


person Sasha    schedule 24.10.2012    source источник


Ответы (3)


Самым простым решением, которое я нашел, было переключение администратора в файле seed.rb сразу после создания пользователя. Таким образом, я избегаю "массового" назначения без необходимости назначать в консоли. Так:

admin = User.create(
    :name => "My Name",
    :email => "my email",
    :password => "password",
    :password_confirmation => "password"
)
admin.toggle!(:admin)
# I assume "admin.update_attribute(:admin, true)" would work as well.
person Sasha    schedule 12.11.2012

Поскольку у вас есть ошибка массового назначения, я думаю, вам следует сохранить только вторую строку attr_accessible в User.rb и отбросить первую строку, которая вызывает ошибку.

person Jonathan Lin    schedule 24.10.2012
comment
Это не исправляет. Я имею в виду, что я не получаю ошибок массового назначения, когда я запускаю действие обновления моего контроллера. Я думаю, мне нужна эта первая строка для создания двух разных способов обновления - как обычный пользователь и как администратор. Я просто ищу похожий способ посеять как администратор. - person Sasha; 24.10.2012

Я хотел сделать то же самое и в итоге сделал вот так в файле seed.rb:

# db/seeds.rb
users = User.create({email: '[email protected]', username: 'admin', password: 'sEcReT', password_confirmation: 'sEcReT', role: 'admin'},
                    :as => :admin)

# models/user.rb
attr_accessible :email, :username, :password, :password_confirmation, :role, :as => :admin
person Daniel Dener    schedule 03.03.2013