2012-02-23 1 views

답변

38

당신은 같은 설정을 가지고 :

config.authentication_method = :authenticate_admin_user! 

당신이 방법이라는 authenticate_admin_user을 만들 그렇다면! ApplicationController에서 ActiveAdmin은 사용자가 관리 페이지로 이동할 수 있는지 여부를 확인합니다. 이처럼 :

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

과와 ApplicationController에 그 예외의 구조 (또는 당신이 실제로 authenticate_admin_user! 방법 내부 리디렉션 할 수 있습니다)

rescue_from SecurityError do |exception| 
    redirect_to root_url 
end 

그리고 또 하나의 작은 일, 당신은 다음, admin_users이없는 경우 config/initializers/active_admin.rb이 줄을 변경 것이 좋을 것이다 :

config.current_user_method = :current_user 

그리고 유증 당신은 관리자의 기본 경로가 다른 수 있도록 할 수 있습니다/관리자가 아닌 사용자, 관리자 사용자도 사이트의 앞부분을 사용할 수 있어야하기 때문에 당신이 컨트롤러에서 내가 원하는하지 무슨

# 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

이것은 좋은 해결책 인 것처럼 보입니다. current_user는 ApplicationController에서 사용할 수없는 것처럼 보입니다 ... 다른 곳에 넣을 수 없습니까? –

+0

mm 컨트롤러가 실제로 가장 많이 사용되는 장소입니다. 그래서 어떤 문제가 있습니까? nil 또는 NoMethodError를 반환합니까? – alony

+0

nil을 반환합니다. '정의되지 않은 메소드 'admin?' 무응답 : NilClass'. 나는 .admin을 정의 했습니까? 방법, 그래서 그게 아니야. ApplicationController에서 사용할 수없는 current_user의 몇 가지 사례를 발견했습니다. 거기에서 액세스하지 않아도되는 것 같습니다. –

0

"일반"사용자의 경우 사이트에 로그인하기 위해 별도의 로직을 작성해야합니다. 그렇지 않으면 사용자가 활성 관리자를 통해 로그인 할 수 있도록 허용하려는 이유를 이해하지 못할 수도 있습니다. 활성 관리자 devise을 사용하는 경우 User이라는 다른 모델을 만듭니다. config/initializers/active_admin.rb에서

+0

없음을 after_sign_in_path_for 방법을 정의 할 수 있습니다. 나는 하나의 사용자 모델 만 가지는 것이 바람직하다고 생각한다. –