Rails: доступ к текущему сеансу пользователя в модели (

Поддержка приложения Rails v2.3.8, развернутого на Apache с помощью mod_passenger.

Мне нужен доступ к текущему сеансу пользователя в одной из моделей (точнее, наблюдатель Auditor). Я знаю, что это нарушает принцип MVC. Но я должен его нарушить, так как у меня есть наблюдатель, которому нужно знать текущего пользователя, вошедшего в систему. У меня много контроллеров, и выполнение вызова регистратора Auditor было бы не очень СУХИМ.

Я просто пытаюсь вызвать User.current с возвращенным сеансом пользователя, который в данный момент находится в системе. Однако у меня возникла проблема с кешированием / безопасностью потоков. Первоначальный автор использовал переменную класса (@@ current) для хранения текущего пользователя. Но это не потокобезопасно, поэтому я превратил его в этот

class User < AR:Base
  ...
  def self.current
    Thread.current[:user]
  end

  def self.current=(user)
    Thread.current[:user] = user
  end
  ...
end

, так что он должен быть потокобезопасным. И в наблюдателе Auditor у меня есть вызов:

Auditor(subject, action, object)

Где я передаю User.current как subject.

Этот код отлично работает в разработке, но в продуктах я получаю неправильные значения из User.current. Иногда я получаю запись другого зарегистрированного пользователя, а не текущего. Спасибо

5
задан Swartz 18 March 2011 в 23:49
поделиться