2015-09-02 3 views
4

Я пытаюсь реализовать пользовательский лифт для apartment на основе логина пользователя на per request basis.Квартира арендатор на основе зарегистрированного пользователя

В основном то, что я пытаюсь достичь:

  • Каждый раз, когда приходит запрос, перейти к правильному жильцу
  • Если нет авторизованного пользователя, арендатор по умолчанию выберите

Однако моя проблема заключается в том, что я не могу получить текущего пользователя из объекта запроса (Rack::Request), предоставленного Generic Elevator. Любые советы о том, как это сделать, или есть какой-либо другой способ получить текущего пользователя без запроса?

Я использую devise для аутентификации.

+0

Итак, если запрос поступает от пользователя, который не зарегистрирован, вы хотите переключиться на арендатора по умолчанию? – Nathan

+0

Да, и если запрос приходит и пользователь вошел в систему, я хочу переключиться на тент, основанный на пользователе. – Nuno

+0

Я смущен вашей проблемой. У меня создается впечатление, что этот камень уже делает это. На самом деле это весь смысл драгоценного камня. – Nathan

ответ

4

Для тех, у кого такая же проблема, как и я, это было моим решением.

конфигурации/Инициализаторы/apartment.rb

#My excluded models  
config.excluded_models = %w{ User } 

Rails.application.config.middleware.use 'Apartment::Elevators::Generic', lambda { |request| 
     tenant_name = nil 



    if request.env['rack.session']['warden.user.user.key'] != nil 
     tenant_name = User.find(request.env['rack.session']['warden.user.user.key'][0][0]).account.name 
    end 

    return tenant_name 
} 

Однако я не уверен, что это 100% failproof поэтому я буду размещать обновления, если я найду что-то неправильно с ним.

+0

Если вы используете оригинальную драгоценность для аутентификации (которую я предполагаю, что вы с тех пор, как используете начальника), альтернативой является запуск Apartment :: Tenant.switch! путем переопределения контроллера сессий Devise. – muhammadn