2 Stimmen

Wie wird der erste Benutzer zum Administrator in Devise gem?

Ich möchte den ersten Benutzer zum Administrator machen.

Also habe ich das Zeichenfolgenattribut Admin und muss einen Before-Filter erstellen oder den Devise-Registrierungscontroller überschreiben. Etwas wie:

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

Hier ist die Devise-Registrierungsaktion

 def new
  resource = build_resource({})
  respond_with resource

Was wäre der bessere Weg, dies zu tun ?

3voto

Tigraine Punkte 22698

Angenommen, Ihr Code wird nicht sehr oft ausgeführt (nur beim ersten Ausführen Ihrer App in der Produktion), würde ich einfach eine Rake-Aufgabe schreiben, die dies einmal für Sie erledigt, anstatt Ihren Anwendungscode zu überfrachten.

Fügen Sie dies in Ihre Rakefile ein

Aufgabe: :promote_admin => :environment tun
  Benutzer.erstes.update_attribute('admin', 'admin')
end

So halten Sie Ihren Code sauber, während Sie immer noch eine sehr einfache Möglichkeit haben, den ersten Benutzer während der Installation zu befördern.

Wenn Sie den ersten Benutzer befördern möchten, führen Sie einfach rake promote_admin von der Konsole aus und der erste Benutzer wird zum Administrator befördert.

2voto

Kulbir Saini Punkte 3887

Ein besserer Weg wäre es, das admin-Feld als boolean zu haben. Fügen Sie dann den folgenden before_filter Ihrem Modell hinzu.

class User < ActiveRecord::Base
  before_save :set_admin

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

Um dies perfekt funktionieren zu lassen, können Sie folgendes in Ihrer Migrationsdatei haben

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

Das wird den ersten Benutzer zum Administrator machen. Außerdem, wenn Sie alle Ihre Benutzer löschen und dann ein neuer Benutzer sich registriert, wird dieser neue Benutzer Administrator sein.

2voto

yeinhorn Punkte 535

Es hat bei mir nicht funktioniert, ich musste es ein wenig wie folgt ändern:

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X