다세입자를 간단하게 실현할 수 있는gem "acts as tenant"실현

4859 단어 Rails

배경.


분할 채용된 회계 소프트웨어를 개발하고 있다.사용자의 서명, 검증, 로그인, 로그아웃 기능이 완료되었습니다.
단, 예를 들어 사용자 A가 등록한 번역은 새로 서명하고 로그인한 사용자 B에게 누락되지 않는다.모든 데이터가 공유된 상태라는 것이다.
가장 좋은 것은 사용자 A가 등록한 번역은 사용자 A에서만 볼 수 있고 사용자 B가 서명하고 로그인하면 깨끗한 환경이 되어 사용자 B가 사용자 B에서만 볼 수 있는 번역을 등록할 수 있다.
그러나 일부 통용 과목은 A와 B를 볼 수 있다.
또한 응용 프로그램의 URL은 변경되지 않았습니다.A와 B는 같은 URL로 같은 시스템에 로그인합니다.

다방면으로 조사한 결과


원하는 기능을'다세입자'Multitenancy라고 한다.
다행히 Rails에는 Gem이 몇 개 있습니다.힘들지 않아도 이루어질 것 같아서요.
가장 유행하는 것은'Apartment 젬이다.서로 다른 세입자는 서로 다른subdomain을 통해 데이터의 격리를 실현한다.
Apartment+PostgreSQL이라면 미묘한 문제가 있을 수 있습니다.아직 완전히 해결되지 않은 것 같습니다.
두 번째로 유명한 젬은'acts_as_tenant'이라는 젬이다.이번에 사용한 건 이거예요.

드디어 시작합니다.


간단한 설치
  • Gemfile
  • gem 'acts_as_tenant'를 넣습니다.
    실행
  • Bundle Install.
  • 완료.
  • 데이터를 격리하려는 표에 세입자의 ID를 대표하는 열을 추가
    Migration File은 rails g migration addAccountToTables에 다음과 같이 생성됩니다.

    설명:
    ① deals는 분류된 테이블,bank를 저장합니다.accounts는 은행 계좌를 보관하는 책상입니다.그 다음은 모든 사용자에게 데이터를 분리하고 싶은 표입니다.둘 다 이미 있는 책상이야.
    ② users는 기존 사용자의 양식을 저장합니다.이번에는 각user의 데이터를 분리하고 싶어서 여기는:user아이디를 넣으면 됩니다.Acount(Tenant)에 여러 사용자를 포함하고 같은 Tenant의user들이 데이터를 공유하려면 Acount표를 따로 만들어야 합니다.
    ③ 결제과목 공유를 위한 계산과목표glaccounts는 그렇게 변하지 않았다.
    p.s.Migration File의 이름은 "AddAccountToTables"가 아니어도 됩니다.
    Model에 추가acts_as_tenant(:user)

    분리하려는 모델만 있으면 됩니다.회계 과목의 모델-GLAccount는 그대로 있다.
    세입자를 판별하는 코드를 컨트롤러에 넣는다

    설명:
    ①여기set_current_tanant_through_filter는gem가 제공하는 함수입니다.이름은 바꿀 수 없습니다.
    find_current_tenant는 자체 제작한provate 함수입니다.좋아하는 이름도 괜찮아요.
    set_current_tenant는gem에서 제공하는 함수입니다.이름은 바꿀 수 없습니다.
    ④ 매개 변수current_user는 자신이 이전에 쓴 함수이다.로그인한 사용자를 얻기 위해서다.

    이상만 설정하면 사용자 A와 B가 작성할 수 없는 데이터를 볼 수 있습니다.
    나는 매우 간단하고 알기 쉬운 Gem이라고 생각한다.

    좋은 웹페이지 즐겨찾기