다세입자를 간단하게 실현할 수 있는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'이라는 젬이다.이번에 사용한 건 이거예요.
드디어 시작합니다.
간단한 설치
gem 'acts_as_tenant'
를 넣습니다.실행
Bundle Install
.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이라고 생각한다.
Reference
이 문제에 관하여(다세입자를 간단하게 실현할 수 있는gem "acts as tenant"실현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/DURIAN_JADE/items/5fccf94ba40b5d28e654텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)