Каков наилучший метод создания «огороженных садов» для нескольких клиентов в вашей базе данных? - PullRequest
10 голосов
/ 06 апреля 2009

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

Я даже не уверен, есть ли слово для этой концепции, но есть ли какой-либо установленный способ автоматического разделения данных, чтобы любые вызовы ActiveRecord в базу данных фильтровались / ограничивались правильным client_id пользователя, авторизован?

Конечно, простым способом было бы просто добавить "where client_id = ?" и вставить идентификатор клиента пользователя ... в конец каждого отдельного запроса ActiveRecord.

Есть ли какая-либо идея фильтра для моделей, чтобы любой метод поиска (включая динамические) автоматически связывал client_id с ними ?. Так что я мог бы просто сделать Model.find_by_what_I_want(foo), и он автоматически знал бы, что нужно ограничить это только записями, принадлежащими правильному идентификатору клиента, даже если я не указал это явно?

Ответы [ 2 ]

10 голосов
/ 06 апреля 2009

Если вы используете Rails 2.3+, у вас есть набор стандартных областей:

class Model < ActiveRecord::Base
  default_scope :conditions => ['client_id = ?', client_id]
end

Вы должны убедиться, что client_id установлен где-то в процессе инициализации.

Это обеспечит, чтобы все запросы БД в этой модели использовали условие client_id.

0 голосов
/ 04 мая 2010

Как насчет добавления новой базы данных для каждого клиента? Таким образом, отделение клиента является более конкретным, и ошибки, когда клиенты могут получить данные другого клиента, менее вероятны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...