2011-01-06 2 views
4

Devise 사용자 및 관리자를위한 별도의 모델이 있습니다. 나는 Basecamp 스타일 서브 도메인도 사용하고있다. 사용자 또는 관리자로 인증 할 수 있어야하는 몇 가지 컨트롤러와 작업을 제외하고는 모든 것이 잘 작동합니다.사용자 또는 관리자 모델 및 Basecamp 스타일 하위 도메인으로 로그인하십시오.

현재 authenticate_user가 있습니다! 내 application_controller.rb에서 설정하고 skip_before_filter를 사용하여 컨트롤러 만 액세스 할 수있는 컨트롤러 및 작업을 건너 뜁니다.

불행히도 사용자 나 관리자가 액세스 할 수있는 컨트롤러와 작업이 필요하기 때문에 불행히도 각 컨트롤러에 인증 요구 사항을 지정할 수는 없습니다.

저는 몇 가지 시도를 해 보았습니다. 그것은 authenticate_user 이동하면 보인다! 및 authenticate_admin! 일종의 하위 도메인 감지 로직으로 처리하지 못합니다. 기본적으로 :

current_subdomain = request.subdomains.first  
if current_subdomain == 'admin' 
authenticate_admin! 
else 
authenticate_user! 
end 

내가 한 시점에서,이 인증을 시도 얻을 수 있었다지만 리디렉션 루프 (와 나를 위해 첫 번째 결과 인증을 필요로에서 세션 컨트롤러를 제외시켰다 실패 된 몇 가지 이유 루비!).

admin 상태를 나타내는 사용자에게 필드를 추가 할 수 있다는 것을 알았지 만, 응용 프로그램은 몇 가지 컨트롤러와 작업을 제외하고는 사용자와 관리자간에 더 큰 권한 분리가 필요합니다.

  • 루비 1.9.2
  • 레일 3.0.3
  • 고안 아마 1.1.3

답변

13

t 전에 필터를 작성하십시오.

#application_controller.rb 
def authenticate_any! 
    if admin_signed_in? 
     true 
    else 
     authenticate_user! 
    end 
end 

의 그 라인은 다음 인증 사용

#myobject_controller.rb 
before_filter :authenticate_any! 

당신이 관리자로 로그인 한 경우를 통해 액세스 할 수 있도록 모두 관리자 및 사용자가 원하는 컨트롤러 다음은 전달합니다 before_filter, 그렇지 않으면 authenticate_user를 거치게됩니다! 이것은 기본 동작입니다.

10

사실이 작동하지 않습니다

#application_controller.rb 
def authenticate_any! 
    if admin_signed_in? 
     true 
    else 
     authenticate_user! 
    end 
end 

그것은을 인증 사용자에 무한 재귀가 시작됩니다 ..

을 대신 시도 :

def authenticate_user! 
    return if admin_signed_in? 
    super 
end 

그냥 기억이이 두 번째로 해결책은 다음과 같습니다. '적어도 사용자로 로그인해야합니다.' 그리고 인증을 잃을 것입니다. 사용자 만

관리자는 모든 항목에 액세스 할 수 있습니다.

관련 문제