如何让第一个用户成为Devise gem的管理员?

时间:2012-07-19 09:15:31

标签: ruby-on-rails devise

我想让第一个用户成为管理员。

所以我有字符串属性admin,我需要在过滤或覆盖Devise注册控制器之前做一些。类似的东西:

if User.first?
  User.admin = "admin"
  User.save
end

这是设计注册行动

 def new
  resource = build_resource({})
  respond_with resource
end

最好的方法是什么?

3 个答案:

答案 0 :(得分:3)

假设您的代码没有经常运行(仅在第一次在生产环境中运行您的应用程序时),我只需编写一个Rake任务,为您执行此操作,而不是使您的应用程序代码混乱。

将其放入Rakefile

task :promote_admin => :environment do
  User.first.update_attribute('admin', 'admin')
end

通过这种方式,您可以保持代码清洁,同时还可以在安装过程中轻松推广第一个用户。

如果您想宣传第一个用户,只需从控制台运行rake promote_admin,第一个用户将被提升为管理员。

答案 1 :(得分:2)

更好的方法是将admin字段设为boolean。并将以下before_filter添加到您的模型中。

class User < ActiveRecord::Base
  before_save :set_admin

  private
  def set_admin
    self.admin = User.count == 0
  end
end

为了使其完美运行,您可以在迁移文件中包含以下内容

create_table(:users) do |t|
  t.boolean :admin, null: false, default: false
  ...
end

这将使第一个用户成为管理员。此外,当您删除所有用户然后新用户注册时,此新用户将是admin。

答案 2 :(得分:2)

它对我不起作用我不得不改变它有点像这样:

class User < ActiveRecord::Base

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable

  after_create :set_admin

  private
  def set_admin
   if  User.count == 1
     User.first.update_attribute(:admin, true)
   else
     return true
   end
  end
end