Определение current_user с декларативным_авторизацией и authlogic - PullRequest
1 голос
/ 29 июля 2010

Я использую authlogic для аутентификации пользователей.В моих контроллерах я использую current_user, определенный (как задокументировано) следующим образом:

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end
  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

Я также использую Declarative_authorization для управления разрешениями текущего пользователя.Все нормально работает в нормальном сценарии выполнения, но когда я создаю функциональные тесты, которые используют операторы запроса, такие как «get_with», current_user в контроллере равен nil.Я просмотрел вспомогательный код теста Declarative_authorization и обнаружил, что в этом сценарии гем декларативного_авторизации фактически сохраняет текущего пользователя в Authorization.current_user (который, в свою очередь, происходит из Thread.current ["current_user"]).Так что, похоже, что в разных сценариях происходит смешивание действий текущего пользователя.

Мой вопрос: как правильно найти current_user как в обычном режиме выполнения, так и в тестовом сценарии?

Ответы [ 2 ]

0 голосов
/ 30 июля 2010

Ангелус, ты был прав. Я не должен использовать get_with, post_with и т. Д. Они просто устанавливают Authorization.current_user, session [: user] и session [: user_id], и они кажутся устаревшими с authlogic. И по какой-то причине они даже устанавливают для UserSession значение nil, что является причиной проблемы. Таким образом, UserSession.create (users (: admin)), за которым следуют обычные get, post и т. Д., - путь.

0 голосов
/ 29 июля 2010

Вы можете определить before_filter как это в application_controller.

before_filter {| c | Authorization.current_user = c.current_user}

...