Лучший способ справиться с несколькими арендаторами в Rails 3 - PullRequest
5 голосов
/ 23 сентября 2010

Я создаю мультитенантное приложение.

Вся изоляция данных выполняется столбцом TenantID в каждой таблице.

Каков наилучший способ автоматической обработки мультитенантности для всех моделей арендаторов.

Пример:

Contacts.new({.....}) should automatically add :tenant => curret_user.tenant
Contacts.where({....}) should also add :tenant => curret_user.tenant

В настоящее время я вижу что-то подобное в геме CanCan, который может извлекать записи для определенных пользовательских параметров. Но он не предоставляет ничего для операции вставки и обновления. Или, может быть, я не понимаю, как это сделать.

С уважением, Алексей Захаров.

Ответы [ 3 ]

1 голос
/ 23 мая 2011

Я бы порекомендовал проверить рубиновый драгоценный камень.Это позволяет легко убедиться, что все выполняемые запросы соответствуют текущему арендатору.http://blog.codecrate.com/2011/03/multitenant-locking-down-your-app-and.html

например:

Multitenant.with_tenant current_tenant do
  # queries within this block are automatically
  # scoped to the current tenant
  User.all

  # records created within this block are
  # automatically assigned to the current tenant
  User.create :name => 'Bob'
end
1 голос
/ 01 декабря 2014

Я использовал Выступите в роли арендатора драгоценный камень для мультитенантности. Это довольно хороший драгоценный камень и очень прост в использовании. Вот документация этого драгоценного камня Действуй как арендатор

1 голос
/ 30 сентября 2010

Это возможно, если вы будете работать со всеми коллекциями через объект-арендатор.

Вот пример использования Mongoid:

#Find all products with price > 500 in current tenant scope

current_tenant.products.where(:price.gt => 500) 

#It also work for create and save operations

current_tenant.products.create :name => "apple", :price => 200
...