문제

내 응용 프로그램에는 사용자 부분 및 /관리자 부품이 있습니다. 고객과 같은 2 개의 모델 계정 및 관리자가 있으며 계정과 관리자를 별도로 인증해야합니다. 관리자는 계정의 부품에 액세스해서는 안되며 계정은 관리 영역에 액세스해서는 안됩니다. 저를위한 솔루션이 있습니까? 아니면 사용자와 관리자를 위해 2 개의 다른 응용 프로그램을 작성한 다음 MERB 1.1을 기다렸다가 어떻게 든 1 앱에 장착해야합니까? 어떤 아이디어?

도움이 되었습니까?

해결책

당신의 질문은 나에게 매우 흥미로워 보입니다. 처음에는 같은 문제가있었습니다. 따라서 앱 구조에 따라 하나를 선택할 수있는 다른 솔루션을 제안 할 수 있습니다.

  1. 모든 사용자가 하나의 클래스에 속해 있지만 특수 필드 (userclass = (: client, : moderator, : admin 등)가있는 경우 최소 앱 수정이 있으면 컨트롤러/뷰에서 사용자 클래스 매개 변수를 확인하십시오. 나는 그것이 당신에게 좋은 생각이 아니라고 생각합니다.

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

예를 들어, ClientAuth, 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

전략에 대해 다른 인증 클래스 (관리자, 클라이언트)를 설정했기 때문에 정보를 얻을 수 있습니다. session.user.class (객체의 클래스 이름을 찾는 기본 루비 메소드입니다).

다음은 유용한 링크입니다.

  1. http://www.slideshare.net/hassox/merb-auth-presentation
  2. 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
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top