2012-02-23 12 views

Odpowiedz

38

W config/initializers/active_admin.rb masz taki config:

config.authentication_method = :authenticate_admin_user! 

więc jeśli utworzyć metodę o nazwie do authenticate_admin_user! w ApplicationController, ActiveAdmin sprawdzi, czy użytkownik może przejść do strony administratora, czy nie. Tak:

# restrict access to admin module for non-admin users 
def authenticate_admin_user! 
    raise SecurityError unless current_user.try(:admin?) 
end 

i ratownictwa z tego wyjątku w ApplicationController (czy rzeczywiście można przekierować wewnątrz metody authenticate_admin_user!)

rescue_from SecurityError do |exception| 
    redirect_to root_url 
end 

I jeszcze jedna mała rzecz, jeśli nie masz admin_users, a następnie byłoby miło, aby zmienić tę linię w config/initializers/active_admin.rb:

config.current_user_method = :current_user 

I z devise może chcesz, aby domyślna ścieżka inna dla administratora/Użytkowników non-administratora, dzięki czemu można określić after_sign_in_path_for metody w kontrolerze

# path for redirection after user sign_in, depending on user role 
def after_sign_in_path_for(user) 
    user.admin? ? admin_dashboard_path : root_path 
end 
+0

To wydaje się dobrym rozwiązaniem, bu current_user wydaje się niedostępny w ApplicationController ... Nie mogę umieścić go gdzieś indziej? –

+0

Kontroler mm to miejsce, w którym jest najczęściej używany. Więc jaki masz problem, zwraca zero lub NoMethodError? – alony

+0

Zwraca zero; "niezdefiniowana metoda" admin? dla zero: NilClass'. JA zdefiniowałem .admin? metoda, więc to nie to. Znalazłem kilka przypadków, w których current_user nie jest dostępny w ApplicationControlller, wydaje się, że nie powinno się z niego korzystać. –

0

Dla "normalnych" użytkowników powinieneś napisać osobną logikę, aby zalogować się do witryny, a może nie rozumiem, dlaczego chcesz zezwolić użytkownikom na logowanie się przez aktywnego administratora. Aktywny administrator przy użyciu devise, wystarczy utworzyć inny model o nazwie User.

+0

Nie, to nie jest to, co chcę zrobić, ponieważ użytkownicy Administrator powinien mieć możliwość korzystania z przednią część miejscu też. Uważam, że dobrą praktyką jest posiadanie tylko jednego modelu użytkownika. –

Powiązane problemy