2012-04-04 6 views
3

Ich versuche, Anmeldungen auf einen Devise-Administrator zu beschränken. Wenn möglich, möchte ich CanCan vorerst nicht verwenden. Ich habe ein separates Devise-Admin-Modell erstellt, wie in Option 1 beschrieben: https://github.com/plataformatec/devise/wiki/How-To:-Add-an-Admin-Role.Wie kann ich die Anmeldung auf Admin mit Devise beschränken?

Als nächstes habe ich eine CRUD-Schnittstelle für Benutzer wie hier beschrieben eingerichtet: https://github.com/plataformatec/devise/wiki/How-To:-Manage-users-through-a-CRUD-interface.

Ich möchte Neuanmeldungen beschränken, indem Sie so etwas wie before_filter :authenticate_admin! in der Benutzer-Controller verwenden, aber aus irgendeinem Grund ist es nicht Neuanmeldungen zu beschränken.

sieht Mein routes.rb dies wie:

devise_for :admins 
devise_for :users, :path_prefix => 'd' 
resources :admins 
resources :users, :controller => "users" 

Irgendwelche Ideen, warum before_filter :authenticate_admin! ist Neuanmeldungen nicht zu beschränken?

Antwort

8

Sie können before_filter :authenticate_admin! nicht im Benutzer-Controller verwenden, da es sich bei admin und user um zwei verschiedene Modelle in Ihrer App handelt.

Ich weiß nicht, ob ich voll und ganz verstehen, was Sie meinen, aber Sie können dies tun, wenn Sie (oder Admin) keine neuen Anmeldungen für Benutzer akzeptieren wollen:

# in your User(Admin) model 
devise :registerable # remove :registerable 

hoffe, das hilft!

+0

Sie sollten 'before_filter: authenticate_admin!' Verwenden, wenn Sie eine Administratorrolle hinzufügen. Dies funktioniert derzeit für mich in einem Users Index und show action (zur Verwaltung von Benutzern als admin). Ich bin mir nicht sicher, warum es nicht an der Create-Aktion arbeitet. Ich möchte nicht entfernen: registrierbar, weil ich möchte, dass Administratoren Benutzer hinzufügen können. – Scott

+0

Hallo Scott, du musst keine neue 'create' Aktion definieren. Wenn Sie in den Quellcode von devise schauen, finden Sie unter 'app/controllers/devise/registrations_controller.rb' devise alles für Sie, außer diesen Aktionen,' authenticate_scope! ', Was eine abstrakte Methode für' authenticate_admin ist! 'in Ihrem Fall, ist vorangestellt und funktioniert nur für **' edit destroy update' ** diese drei Aktionen. Wenn Sie wirklich 'authenticate_admin!' Filter hinzufügen möchten, um eine Aktion zu erstellen, können Sie von 'Devise :: RegistrationsController' übernehmen und' prepend_before_filter: authenticate_scope !,: except => [: cancel] 'hinzufügen. – Tomato

+1

Ich entschied, dass dies zu kompliziert wurde, nur unter Verwendung von Devise, also fügte ich CanCan hinzu, was großartig funktionierte. Danke für die Hilfe. – Scott

2

Ich suchte nach etwas Ähnlichem; Neuanmeldungen insgesamt deaktivieren Ich grub diese irgendwo auf einer Mailingliste und während es mein Problem gelöst, es könnte ein anständiger Ausgangspunkt für Ihre sein:

class RegistrationsController < Devise::RegistrationsController 
    def new 
    flash[:failure] = t('registrations.registrations_disabled') 
    redirect_to root_path 
    end 
end 

Vielleicht etwas ähnliches, aber einen Scheck hinzufügen, um zu sehen, ob die current_user ein Admin werden dann basierend Redirect auf diesem ...

1

Ich dachte eine Weile darüber nach und kam schließlich mit diesem.

Es ist eine Hilfsfunktion für jedes Modell von devise erstellt

class UsersController < Devise::RegistrationsController 

    before_filter :authenticate_admin! 

    def new 
    if admin_signed_in? 
     super 
    else 
     redirect_to admin_session_path 
    end 
    end 

Hoffnung, das hilft. Es funktioniert wie ein Charme :)

Verwandte Themen