2012-02-12 13 views
9

Ustawiłem ActiveAdmin wcześnie w moim projekcie i użyłem domyślnego modelu uwierzytelniania admin_users. Od tego czasu używałem Devise'a, aby skonfigurować oddzielny model użytkownika i zdałem sobie sprawę, że prawdopodobnie dużo mądrzej będzie scalić dwie tabele, tak, że administrator może mieć działania administracyjne zarówno w Activeadmin, jak i na początku witryny. Jak mogę skonfigurować ActiveAdmin, aby korzystał z modelu Użytkownicy z kolumną, która może oznaczać administratora (np. is_admin lub zdarzenie o poziomie uprawnień, aby administratorzy i Moderatorzy)?Łączenie użytkowników ActiveAdmin z istniejącym modelem użytkownika

Rails 3.1 
ActiveAdmin 0.3.3 
Devise 1.4.9 

Odpowiedz

9

Aby uzyskać szybki blok kodu, jak to zrobić, korzystając z istniejącego modelu "User" z programem activeadmin, odpowiedź jest naprawdę łatwa. W ApplicationController:

class ApplicationController < ActionController::Base 
    def authenticate_admin_user! #use predefined method name 
     redirect_to '/' and return if user_signed_in? && !current_user.is_admin? 
     authenticate_user! 
    end 
    def current_admin_user #use predefined method name 
     return nil if user_signed_in? && !current_user.is_admin? 
     current_user 
    end 
end 

I po prostu użyj tego, co Devise skonfigurował do uwierzytelniania. Numer redirect_to to miejsce, w którym chcesz wysyłać użytkowników, którzy są zalogowani i NIE mają uprawnień administracyjnych.

4

ActiveAdmin pozwala Ci define your own authentication methods. Można migrować tabele użytkowników, aby mieć dodatkową kolumnę administracyjną i oznaczyć istniejących administratorów jako takich w niej, a następnie ustawić metody uwierzytelniania (zgodnie z określeniem) w config/initializers/active_admin.rb.

+0

+1, ponieważ wierzę, że dajesz mi właściwą odpowiedź. Zakładam, że zbuduję nową metodę w 'application_controller'? Ale co muszę zrobić, aby zintegrować obecne uwierzytelnianie Devise bez nadpisywania istniejących działań ustalonych przez program? –

+0

Jeśli istniejące metody Devise działają, możesz po prostu przekazać je jako symbole do ActiveAdmin. W przeciwnym razie możesz je przesłonić lub zdefiniować nowe metody, jeśli ma to sens dla twojej aplikacji ("ApplicationController" jest dość powszechnym miejscem). – coreyward

Powiązane problemy