Выступает в роли драгоценного камня арендатора для всех данных пользователей, игнорируя данные областей видимости, основанные на поддомене
Я использую Gem Act_as_tenant для создания мультитенантного приложения. Я следовал инструкциям. Я использую субдомены.
В моем application_controller.rb
Я имею:
set_current_tenant_by_subdomain(:account, :subdomain)
я использую Account
в качестве арендатора. В моем User
Модель, которую я назвал:
acts_as_tenant(:account)
Эта проблема
Когда я вхожу в учетную запись, используя поддомен (например: john.realestate.dev
), все отлично (current_tenant
т.е. Джон установлен).
У меня есть другая модель под названием Property
; когда текущий вошедший в систему арендатор, т. е. Джон, создает новое свойство, эту запись видят все остальные пользователи. Я хочу, чтобы только Джон смог увидеть созданную им запись.
Куда я иду не так?
мои модели отношений: -
Account
- has_many :users
User
- belongs_to :account
Property
1 ответ
Я исправил свою проблему, создав отношения между учетной записью (has_many:properties) и собственностью (Belongs_to:account).
Затем я добавил act_as_tenant(:account) в модель свойств. Я запустил миграцию, которая добавляет account_id к модели свойств.
теперь он обрабатывает данные, созданные только вошедшим в систему пользователем, в соответствии с поддоменом.
я исправил это, перечитывая документацию драгоценного камня несколько раз, пока я не понял смысл этого утверждения из документа.
acts_as_tenant требует, чтобы каждая модель с областью действия имела в своей схеме столбец, связывающий ее с арендатором. Добавление acts_as_tenant к объявлению модели будет включать эту модель в текущий арендатор, НО ТОЛЬКО если установлен текущий арендатор.
Любые идеи, предложения по моей реализации приветствуются.
Настоящее исправление здесь - убедиться, что вы включили acts_as_tenant(:account)
на каждой модели, которую вы хотите оценить. Это гарантирует, что он проверяетcurrent_tenant
перед сохранением данных.
Вам не обязательно нужен has_many
а также belongs_to
отношение, хотя кажется, что это может иметь смысл для вашего приложения.