2009-08-07 4 views
0

내 응용 프로그램에 사용자 부분과/admin 부분이 있습니다. 2 가지 모델의 계정 (예 : 고객)과 관리자가 있으며 계정과 관리자를 별도로 인증해야합니다. 관리자는 계정의 일부에 액세스해서는 안되며 계정은 관리 영역에 액세스해서는 안됩니다. 저를위한 해결책이 있습니까? 아니면 사용자와 관리자를 위해 2 가지 다른 응용 프로그램을 작성한 다음 merb 1.1을 기다렸다가 어떻게 든 1 개의 응용 프로그램에 마운트해야합니까? 어떤 아이디어?Merb 인증 질문

답변

1

귀하의 질문은 나에게 매우 흥미로운 것 같습니다. 처음에는 똑같은 문제가있었습니다. 그래서, 당신이 선택할 수있는 다른 솔루션을 제안 할 수 있습니다 귀하의 애플 리케이션 구조에 따라 다릅니다.

  1. 모든 사용자는 하나 개의 클래스에 속하지만 (특수 필드가있는 경우에서는 UserClass = (같은 : 클라이언트 : 사회자 : 관리자 등) 단지 사용자 클래스를 검사, 응용 프로그램 수정의 최소가 게요 매개 변수를 컨트롤러/뷰에서 사용하는 것이 좋습니다.

  2. 모범 사례 - Merb 인증 전략을 사용하는 것이 좋습니다. 매우 유연한 메커니즘이므로 작업 할 클래스를 선택할 수 있습니다.

예를 들어 다음과 같은 두 가지 기본 전략이 있습니다. C lientAuth, AdminAuth. 둘 다 서로 다른 사용자 클래스 (클라이언트, 관리자)를 사용합니다. 모두 당신이 필요 - 사용자 정의 전략 파일을 만들고 다음과 같이 라우터에 연결 :

authenticate(ClientAuth) do 
    match('/profile').to(:controller => ProfileController) 
end 

authenticate(AdminAuth) do 
    match('/admin').to(:controller => AdminController) 
end 

을 또는 당신이 컨트롤러에서 인증을 사용할 수 있습니다 또한

class AdminController 
    :before ensure_authenticated, :with => [AdminAuth] 

    def index 
    ... your stuff ... 
    end 
end 

, 당신도 하나의 컨트롤러를 사용할 수 있습니다

class AdminController 
    :before ensure_authenticated, :with => [AdminAuth, ClientAuth] 
end 

전략에 대해 서로 다른 인증 클래스 (Admin, Client)를 설정했기 때문에 다음과 같은 두 가지 전략을 사용하여 두 클래스의 인증을 수행 할 수 있습니다. 그것에 대해 정보를 얻을 수있을 것이다 :

  1. http://www.slideshare.net/hassox/merb-auth-presentation
  2. : session.user.class 여기

    (이 객체의 클래스 이름을 찾을 수있는 기본 루비 방법은) 몇 가지 유용한 링크입니다 http://merbunity.com/tutorials/19

  3. http://www.slideshare.net/carllerche/merb-pluming-the-router-presentation
  4. http://merbivore.com/documentation/1.0/doc/rdoc/merb-auth-core-1.0/index.html?a=C00000025&name=Strategy