2012-06-29 1 views
1

멀티 테넌트 애플리케이션 (공유 데이터베이스, 공유 스키마)을 고려 중입니다. 세입자 식별자 (세입자 키)는 모든 행을 올바른 세입자와 연관시킵니다.레일에서 멀티 테넌트 웹 애플리케이션의 현재 테넌트를 결정하고 유지하기

제가 잘 모르는 부분은 일종의 글로벌 범위에 tenant_id를로드하는 방법입니다. 어떻게해야합니까? 도메인을 구문 분석 한 다음 도메인을 기반으로 tenant_id를 조회한다고 가정합니다.

내 질문 :

  1. 어디 조회는 레일 응용 프로그램에서 일어날 것

    ? 초기화 프로그램에서? 이 작업을 수행하는 것이 더 좋은 점이 있습니까?
  2. 일단 tenant_id를 결정했으면이를 유지하는 가장 좋은 방법은 무엇입니까? 간단한 session_id?

답변

4

이 기능의 컨트롤러에는 필터를 먼저 사용합니다.

제어기 클래스의 서브 클래스를 사용하여 제어기에서 중복 코드를 제거 할 수도 있습니다.

주어진 테넌트의 정보에 대한 액세스는 사용자별로 인증해야한다는 점에 유의하십시오. 주어진 사용자가 둘 이상의 임차인에게 액세스 할 수 있는지 결정해야합니다. 예를 들어 사용자 "joe"가 임차인 1과 2에 액세스해야합니까? 또는 Joe에게 입주자 로그인이 필요합니까?

로그인 권한은 임차인 정보에 대한 액세스를 제어해야합니다. 승인을 위해 도메인 이름에 의존하지 마십시오.

다시 : tenant_id를 유지 하시겠습니까? 세션에 저장하십시오. 세션에 대한 액세스가 비용이 많이 드는 경우 (DBMS에 저장) 컨트롤러를 시작할 때 인스턴스 변수로 메모리 내 복사본을 만듭니다. user_ids가 저장되는 방식에 대한 Google

사용자가 다른 임차인에게 액세스하고 싶은 경우 사용자 환경을 결정해야합니다.

사용자가 로그인하기 전에로드 할 시작 화면을 보려면 하위 도메인 이름을 보는 것이 좋습니다. 들어오는 요청에 사용 된 하위 도메인을 확인하려면 request.fullpath()Docs. 컨트롤러 필터에서 수행하십시오.

승인이 USER_ID에서 제공하기 때문에, 조 tenant1.app.com에 로그인 할 경우를 테스트하기 위해 기억하지만, 단지 템플릿 시스템을 찾고 tenant2.app.com

보너스 대답에 액세스 할 수 있습니다 고객이 임차인의 사용자 인터페이스를 완벽하게 제어 할 수있게 해줍니다. Liquid templates을 확인하십시오. 나는 고객들이 그들의 모양과 느낌을 안전하게 제어 할 수 있도록하기 위해 그것들을 사용하는 것에 매우 성공적이었다. 코멘트

  • 에 추가 질문을 다시

    는 웹 서버를 구성하는 수퍼 유저를 참조하십시오. 구성은 웹 서버마다 다릅니다.

  • 환영 화면을 일반화하지 않으려면 요청 URL에서 사용자 정의 방법을 알아야합니다. 임차인 전용 하위 도메인이 가장 좋습니다.하위 도메인이없는 경우 일반 환영을 표시합니다. 사용자가 로그인하면 임차인 및 사용자 정의 방법을 결정할 수 있습니다. 당신이보기 도우미를 의미 굳이 이렇게

재 도우미, 그때 세입자가 결정되는 주요 장소로 추천하지 않을 것입니다. @user@tenant을 한 번 조회 한 다음 동일한 세션에 대한 추가 요청 중에 세션에서 검색하는 경량 모델로 만듭니다. 모델은 컨트롤러에 의해 사용되며 아마도 모델에 전달됩니다. View 레이어는 또한보기 레이어를보고 필요할 때 사용할 수 있습니다.

UI가 다른 테넌트와 완전히 다르게 보일 수 있고 보일 경우보기 외에도 "테넌트 디스플레이"레이어를 추가하십시오. 예를 들어 뷰가 인스턴스 변수를 수집하고 올바른 Liquid 템플릿을 찾은 다음 템플릿을 통해 뷰를 표현합니다.

"tenant_a then x else y"가 표시되지 않게하려면

+0

래리 - 감사합니다. 백 엔드 시스템은 물론 로그인 인증에 의존하지만, 어떤 프런트 엔드 공개 사이트를로드할지 결정하는 방법을 묻습니다. – cman77

+0

업데이트 된 답변 –

+0

래리 - 고마워. 이것을 웹 서버 레벨에서 설정하기위한 모든 포인터/리소스는 무엇입니까? 일부 고객은 하위 도메인을 선호하지만 다른 사용자는 "전체/기본"도메인을 선호 할 것으로 기대됩니다. 또한 -이 논리가 도우미에 있어야하는 경우 컨트롤러 클래스를 서브 클래 싱하는 것이 아닌가 궁금합니다. – cman77

관련 문제