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
To wydaje się dobrym rozwiązaniem, bu current_user wydaje się niedostępny w ApplicationController ... Nie mogę umieścić go gdzieś indziej? –
Kontroler mm to miejsce, w którym jest najczęściej używany. Więc jaki masz problem, zwraca zero lub NoMethodError? – alony
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ć. –