문제
내 응용 프로그램에는 사용자 부분 및 /관리자 부품이 있습니다. 고객과 같은 2 개의 모델 계정 및 관리자가 있으며 계정과 관리자를 별도로 인증해야합니다. 관리자는 계정의 부품에 액세스해서는 안되며 계정은 관리 영역에 액세스해서는 안됩니다. 저를위한 솔루션이 있습니까? 아니면 사용자와 관리자를 위해 2 개의 다른 응용 프로그램을 작성한 다음 MERB 1.1을 기다렸다가 어떻게 든 1 앱에 장착해야합니까? 어떤 아이디어?
해결책
당신의 질문은 나에게 매우 흥미로워 보입니다. 처음에는 같은 문제가있었습니다. 따라서 앱 구조에 따라 하나를 선택할 수있는 다른 솔루션을 제안 할 수 있습니다.
모든 사용자가 하나의 클래스에 속해 있지만 특수 필드 (userclass = (: client, : moderator, : admin 등)가있는 경우 최소 앱 수정이 있으면 컨트롤러/뷰에서 사용자 클래스 매개 변수를 확인하십시오. 나는 그것이 당신에게 좋은 생각이 아니라고 생각합니다.
모범 사례 - 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 (객체의 클래스 이름을 찾는 기본 루비 메소드입니다).
다음은 유용한 링크입니다.