Module: CmpaAuth::RailsHelpers

Defined in:
lib/cmpa_auth/rails_helpers.rb

Overview

Implementa a autenticação através de um before_filter. Todo o controle é realizado através de dois ids armazenados na sessão: current_user_id e lotacao_temporaria_id.

O módulo também oferece suporte a algumas facilidades, como perguntar se o usuário está logado.

Class Method Summary collapse

Class Method Details

.included(receiver) ⇒ Object

:nodoc:



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/cmpa_auth/rails_helpers.rb', line 12

def self.included(receiver) #:nodoc:
  receiver.class_eval do
    
    before_filter :cmpa_authenticate
    helper_method :current_user, :current_lotacao, :logged_in?
    
    rescue_from CmpaAuth::AccessDenied, :with => lambda { render_403 }
    
    #
    # Renderiza uma mensagem de erro HTML to tipo 403 (proibido) nos casos
    # em que a exceção CmpaAuth::AccessDenied for disparada.
    #
    def render_403
      render :template => "rescues/403", :status => 403, :layout => false
    end
    
    private
    
      def cmpa_authenticate
        redirect_to new_session_url unless logged_in?
      end
      
      #
      # Retorna o usuário logado na sessão.
      #
      def current_user
        @current_user ||= ::Pessoa.find_by_id(session[:current_user_id])
      end
      
      #
      # Retorna a lotação temporária atual (aquela que o usuário escolheu ao
      # logar no sistema).
      #
      def current_lotacao
        @current_lotacao ||= ::LotacaoTemporaria.find_by_id(session[:lotacao_temporaria_id])
      end
      
      # Verifica se o usuário está logado.
      def logged_in?
        current_user && current_lotacao
      end
  end
end