переписать ActiveRecord - PullRequest
       1

переписать ActiveRecord

0 голосов
/ 05 августа 2011

как у всех нас, у меня есть какое-то приложение.В базе данных я храню конфиденциальные данные и хочу перезаписать ActiveRecord (или где-то еще?), Чтобы всегда добавлять оператор AND user_id = current_user ко всем запросам SQL, отправляемым в базу данных (я добавлю столбец user_id во все таблицы).Я в основном хочу убедиться, что все операции, выполняемые пользователем, выполняются ТОЛЬКО на его данных.

С уважением, Матеуш

Ответы [ 3 ]

0 голосов
/ 05 августа 2011

Вы можете добавить AbstractModel с областью по умолчанию, а затем наследовать от нее все другие модели:

class AbstractModel < ActiveRecord::Base
  self.abstract_class = true
  default_scope where(:user_id => Thread.current[:current_user])
end

class SomeModel < AbstractModel
  ...
end

Я использовал Thread.current[:current_user], потому что current_user недоступен внутри моделей. Вы должны назначить current_user для Thread.current в некотором методе before_filter в ApplicationController и т. Д.

0 голосов
/ 05 августа 2011

Похоже, что вы ищете, это стратегия реализации многопользовательского режима в вашем приложении.

Возможно, вы захотите проверить мультитенантный гем , который поможет вам изолировать ваши запросы от данных.принадлежащий текущему арендатору.

В качестве альтернативы, вы можете применить это на уровне базы данных, используя схемы PostgreSQL.Gay Naor отлично говорит о реализации этой стратегии среди других.

Если вы выполните поиск по "приложениям с несколькими арендаторами", вы найдете несколько других обсуждений этой проблемы.

0 голосов
/ 05 августа 2011

Нет способа применить его на уровне приложения, единственный способ применить его - запретить команде использовать методы Class.find / where / etc и разрешать вызывать их только в коллекциях.Поэтому вместо Task.find вы всегда должны использовать current_user.tasks.find и т. Д.

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