cmpa_auth 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. data/CHANGELOG.rdoc +15 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +131 -0
  4. data/app/controllers/sessions_controller.rb +48 -0
  5. data/app/helpers/sessions_helper.rb +16 -0
  6. data/app/views/errors/error_403.html.erb +1 -0
  7. data/app/views/layouts/sessions.html.erb +48 -0
  8. data/app/views/sessions/index.html.erb +5 -0
  9. data/app/views/sessions/new.html.erb +18 -0
  10. data/app/views/sessions/selecao_lotacao_temporaria.html.erb +6 -0
  11. data/config/config.yml +7 -0
  12. data/config/routes.rb +5 -0
  13. data/init.rb +1 -0
  14. data/lib/cmpa_auth/access_denied.rb +7 -0
  15. data/lib/cmpa_auth/authentication.rb +25 -0
  16. data/lib/cmpa_auth/extensions.rb +36 -0
  17. data/lib/cmpa_auth/models/estagiario.rb +6 -0
  18. data/lib/cmpa_auth/models/funcionario.rb +6 -0
  19. data/lib/cmpa_auth/models/grupo_acesso.rb +17 -0
  20. data/lib/cmpa_auth/models/lotacao_temporaria.rb +82 -0
  21. data/lib/cmpa_auth/models/pessoa.rb +26 -0
  22. data/lib/cmpa_auth/models/setor.rb +17 -0
  23. data/lib/cmpa_auth/models/sistema.rb +18 -0
  24. data/lib/cmpa_auth/portal_connection.rb +21 -0
  25. data/lib/cmpa_auth/rails_helpers.rb +56 -0
  26. data/lib/cmpa_auth.rb +22 -0
  27. data/public/images/sistemas/administrativo.png +0 -0
  28. data/public/images/sistemas/agenda.png +0 -0
  29. data/public/images/sistemas/aviso.png +0 -0
  30. data/public/images/sistemas/central_transportes.png +0 -0
  31. data/public/images/sistemas/controle_acesso.png +0 -0
  32. data/public/images/sistemas/convenios.png +0 -0
  33. data/public/images/sistemas/cotas.png +0 -0
  34. data/public/images/sistemas/cursos_eventos.png +0 -0
  35. data/public/images/sistemas/dados_pessoais.png +0 -0
  36. data/public/images/sistemas/efetividade.png +0 -0
  37. data/public/images/sistemas/formulario.png +0 -0
  38. data/public/images/sistemas/helpdesk.png +0 -0
  39. data/public/images/sistemas/movimentacao_pessoal.png +0 -0
  40. data/public/images/sistemas/ouvidoria.png +0 -0
  41. data/public/images/sistemas/pesquisa.png +0 -0
  42. data/public/images/sistemas/pesquisa_organizacional.png +0 -0
  43. data/public/images/sistemas/processo_eletronico.png +0 -0
  44. data/public/images/sistemas/qbm.png +0 -0
  45. data/public/images/sistemas/seguranca.png +0 -0
  46. data/public/images/sistemas/sms.png +0 -0
  47. data/public/images/sistemas/telefonia.jpg +0 -0
  48. data/public/images/sistemas/telephone.png +0 -0
  49. data/public/images/sistemas/video.png +0 -0
  50. data/rails/init.rb +1 -0
  51. metadata +105 -0
data/CHANGELOG.rdoc ADDED
@@ -0,0 +1,15 @@
1
+ == 1.0.2 released 2009-11-08
2
+
3
+ * Documenta��o melhorada.
4
+ * Atualiza��o do m�todo <tt>LotacaoTemporaria#method_missing</tt> para que ele
5
+ defina os m�todos que n�o existirem e que comecem por <i>in_groups_of</i> ou
6
+ <i>role_of</i>.
7
+
8
+ == 1.0.1 released 2009-11-05
9
+
10
+ * Melhorias na documenta��o e cria��o do README.
11
+ * Remo��o dos m�todos <tt>CmpaAuth::Authentication.in_group?</tt> e <tt>CmpaAuth::Authentication.in_groups?</tt>
12
+
13
+ == 1.0.0 released 2009-09-10
14
+
15
+ * Primeiro release
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2009 CMPA Câmara Municipal de Porto Alegre - Assessoria de Informática
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,131 @@
1
+ == CmpaAuth
2
+
3
+ Biblioteca de autentica��o para a Assessoria de Inform�tica (C�mara Municipal de
4
+ Porto Alegre).
5
+
6
+ Quando a aplica��o for inicializada uma s�rie de coisas estar� dispon�vel.
7
+
8
+ * Controllers
9
+ - ApplicationController: respons�vel pela autentica��o, redirecionamento de
10
+ exce��es e implementa��o de alguns helpers (ex.: logged_in?, current_user,
11
+ etc)
12
+ - SessionsController: respons�vel pela exibi��o das telas de login e
13
+ lota��es tempor�rias. Tamb�m respons�vel pelo logout.
14
+ * Views
15
+ - Layouts: um layout gen�rico � utilizado para a autentica��o e para a
16
+ sele��o de lota��es tempor�rias.
17
+ - Errors: cont�m telas com mensagens de erro. Atualmente com suporte ao erro
18
+ 403 (forbidden).
19
+ * Routes
20
+ - Um resource padr�o para uma session. Na se��o "Exemplos de Uso" h� uma
21
+ descri��o dessas rotas e como utiliz�-las.
22
+ * Public
23
+ - Uma pasta (sistemas) ser� copiada para a pasta <i>public/images</i> da
24
+ aplica��o contendo as imagens de cada sistema.
25
+
26
+
27
+ == Exemplos de Uso
28
+
29
+ === Configura��o
30
+
31
+ No arquivo <i>config/environment.rb</i> adicione a seguinte linha de c�digo no
32
+ bloco de inicializa��o:
33
+
34
+ config.gem 'cmpa_auth'
35
+
36
+ Observe que o Rails avisar� caso a gem cmpa_auth n�o esteja instalada,
37
+ entretanto n�o ser� capaz de instal�-la. No momento voc� deve copiar a �ltima
38
+ vers�o da gem dispon�vel em <i>\\\\cmpa-s01\info\desenvolvimento\gems</i> para o
39
+ seu computador e rodar o comando abaixo.
40
+
41
+ $ sudo gem install --local path/to/gem/cmpa_auth-x.x.x.gem
42
+
43
+
44
+ === Models
45
+
46
+ Para tornar as nossas vidas mais simples, n�o � preciso criar os modelos abaixo.
47
+ Caso eles j� tenham sido declarados na aplica��o os seus m�todos/constantes
48
+ ser�o "mesclados".
49
+
50
+ * Estagiario
51
+ * Funcionario
52
+ * GrupoAcesso
53
+ * LotacaoTemporaria
54
+ * Pessoa
55
+ * Setor
56
+ * Sistema
57
+
58
+
59
+ === Controllers e Views
60
+
61
+ Nesse momento voc� j� � capaz de utilizar todas as funcionalidades do cmpa_auth.
62
+ Vamos supor que voc� queira perguntar se o usu�rio est� logado. Simples, utilize
63
+ o helper <tt>logged_in?</tt>. Para pegar o usu�rio logado, o qual � do tipo
64
+ <tt>Pessoa</tt> ou a lota��o tempor�ria que ele escolheu ao entrar no sistema,
65
+ utilize, respectivamente, os helpers <tt>current_user</tt> e
66
+ <tt>current_lotacao</tt>.
67
+
68
+ Para saber se a lota��o atual est� no grupo de acesso SUPER, voc� pode perguntar:
69
+
70
+ current_lotacao.role_of_super?
71
+
72
+ Ou se quiser saber se a lota��o atual est� nos grupo de acesso <tt>SUPER</tt>
73
+ e/ou no grupo de acesso <tt>REDATOR</tt>, pergunte:
74
+
75
+ current_lotacao.role_of_super_and_redator?
76
+ current_lotacao.role_of_super_or_redator?
77
+
78
+ O importante � notar que esses m�todos s�o criados atrav�s de
79
+ <tt>method_missing</tt> e, portanto, para utiliz�-los voc� deve seguir algumas
80
+ regras.
81
+
82
+ * Chamar um m�todo que comece com <i>in_groups_of</i> / <i>role_of</i> e termine
83
+ com um ponto de interroga��o.
84
+ * Os grupos de acesso s�o os nomes separados por um <i>and</i> ou por um
85
+ <i>or</i> (n�o ambos). � feito um upcase em cada um desses grupos, ou seja, no
86
+ banco de dados esses nomes devem estar em caixa alta.
87
+ Exemplo:
88
+
89
+ # � uma chamada inv�lida, pois n�o h� como saber se queremos testar
90
+ # "SUPER" && ("REDATOR" || "EDITOR") ou se queremos testar
91
+ # ("SUPER" && "REDATOR") || "EDITOR"
92
+ current_lotacao.role_of_super_and_redator_or_editor?
93
+
94
+ Uma boa pr�tica � criar um helper para esse teste e n�o ficar fazendo a mesma
95
+ chamada repetidas vezes... Por exemplo, no <tt>ApplicationController</tt>.
96
+
97
+ helper_method :redator?, :fotografo?
98
+
99
+ private
100
+
101
+ def redator?
102
+ current_lotacao.in_groups_of_super_and_redator?
103
+ end
104
+
105
+ def fotografo?
106
+ current_lotacao.in_groups_of_super_and_fotografo?
107
+ end
108
+
109
+ Ent�o na view podemos perguntar:
110
+
111
+ - if fotografo? || redator?
112
+ ...
113
+
114
+
115
+ === Routes, Login e Logout
116
+
117
+ Como o cmpa_auth utiliza a capacidade do Rails de trabalhar com engines, voc�
118
+ tem acesso autom�tico a algumas rotas para realizar as opera��es de login e
119
+ logout.
120
+
121
+ Para realizar logout e supondo que o usu�rio j� esteja logado, voc� pode
122
+ oferecer o seguinte link na view:
123
+
124
+ = link_to 'sair', session_path, :method => :delete
125
+
126
+ O login � feito automaticamente caso o usu�rio n�o esteja logado. Isso � feito
127
+ atrav�s do before filter <tt>check_authentication</tt> que por sua vez utiliza o
128
+ helper <tt>logged_in?</tt>.
129
+
130
+
131
+ Copyright (c) 2009 CMPA - Assessoria de Inform�tica
@@ -0,0 +1,48 @@
1
+ class SessionsController < ApplicationController
2
+
3
+ before_filter :check_authentication, :only => :index
4
+
5
+ def index
6
+ @sistemas = CmpaAuth::Authentication.allowed_systems(session[:lotacao_temporaria_id]).sort_by(&:nome)
7
+ end
8
+
9
+ def new
10
+ redirect_to root_url if session[:lotacao_temporaria_id]
11
+ end
12
+
13
+ def create
14
+ user = CmpaAuth::Authentication.authenticate(params[:login], params[:password])
15
+ if user
16
+ session[:current_user_id] = user.id
17
+ lotacoes_ativas = user.lotacoes_temporarias_ativas
18
+ if lotacoes_ativas.size == 1
19
+ session[:lotacao_temporaria_id] = lotacoes_ativas.first.id
20
+ redirect_to root_url
21
+ elsif lotacoes_ativas.many?
22
+ redirect_to selecao_lotacao_temporaria_url(user.id)
23
+ else
24
+ flash.now[:error] = "Você não possui lotacões temporárias. Por favor, entre em contato com a Assessoria de Informática"
25
+ render :new
26
+ end
27
+ else
28
+ flash.now[:error] = "Usuário e/ou senha incorretos!"
29
+ render :new
30
+ end
31
+ end
32
+
33
+ def destroy
34
+ reset_session
35
+ flash[:notice] = "Logout efetuado!"
36
+ redirect_to new_session_url
37
+ end
38
+
39
+ def selecao_lotacao_temporaria
40
+ if params[:lotacao_selecionada]
41
+ session[:lotacao_temporaria_id] = params[:pessoa_id]
42
+ redirect_to root_url
43
+ else
44
+ user = Pessoa.find(params[:pessoa_id])
45
+ @lotacoes_temporarias = user.lotacoes_temporarias_ativas
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,16 @@
1
+ module SessionsHelper
2
+
3
+ def link_sistema(sistema_id, options = {}, html_options = {})
4
+ sistema = Sistema.find(sistema_id)
5
+
6
+ url_options = {
7
+ :port => Rails.env == 'development' ? (sistema.porta.to_i - 1000) : sistema.porta,
8
+ :host => Rails.env == 'development' ? "#{ENV['COMPUTERNAME']}.#{ENV['USERDNSDOMAIN']}" : sistema.host,
9
+ :controller => sistema.url
10
+ }
11
+
12
+ options[:class] = "#{options[:class]} icon-sistema icon-#{sistema.image_name.gsub(/\.(png|gif)/, '')}"
13
+
14
+ link_to sistema.nome.capitalize, "http://#{url_options[:host]}:#{url_options[:port]}#{url_options[:controller]}", options, html_options
15
+ end
16
+ end
@@ -0,0 +1 @@
1
+ <h1>403 Forbidden</h1>
@@ -0,0 +1,48 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
2
+ <html>
3
+ <head>
4
+ <title>PortalCMPA - Gerenciamento de Acesso</title>
5
+ <%= stylesheet_link_tag 'application' %>
6
+ <%= javascript_include_tag 'jquery' %>
7
+
8
+ <script type="text/javascript">
9
+ jQuery(function($) {
10
+ $('#focus').focus();
11
+ $('#menu > li:first-child a').addClass('selected');
12
+ });
13
+ </script>
14
+ </head>
15
+ <body>
16
+ <% if logged_in? %>
17
+ <div id='header'>
18
+ <ul id='menu'>
19
+ <li><%= link_to 'Gerenciamento de Acesso' %></li>
20
+ </ul>
21
+ <div class='login'>
22
+ <p>
23
+ <strong><%= current_user.usuario %></strong> |
24
+ <%= link_to "sair", session_url, :method => :delete, :class => 'icon icon-door-out' %>
25
+ </p>
26
+ <em><%= current_lotacao.setor.nome %></em>
27
+ </div>
28
+ </div>
29
+ <% end %>
30
+ <div id='container'>
31
+ <div id='main'>
32
+ <div class='flash'>
33
+ <% flash.each_pair do |k, v| %>
34
+ <%= content_tag :div, v, :class => k %>
35
+ <% end %>
36
+ </div>
37
+
38
+ <%= yield %>
39
+ </div>
40
+ </div>
41
+ <% if logged_in? %>
42
+ <div id='footer'>
43
+ &copy; Assessoria de Informática CMPA |
44
+ <%= link_to "sair", session_url, :method => :delete %>
45
+ </div>
46
+ <% end %>
47
+ </body>
48
+ </html>
@@ -0,0 +1,5 @@
1
+ <ul class='sistemas'>
2
+ <% @sistemas.reject{ |s| s.porta.nil? }.each do |sistema| %>
3
+ <li><%= link_sistema sistema.id %></li>
4
+ <% end %>
5
+ </ul>
@@ -0,0 +1,18 @@
1
+ <div class='form' style='width:40em'>
2
+ <h3>Área restrita. Por favor, efetue login.</h3>
3
+ <% form_tag session_path, :id => 'login' do %>
4
+ <p>
5
+ <%= label_tag :login, 'Usuário:' %>
6
+ <%= text_field_tag :login, params[:login], :size => 20, :id => 'focus' %>
7
+ </p>
8
+
9
+ <p>
10
+ <%= label_tag :password, 'Senha:' %>
11
+ <%= password_field_tag :password, params[:password], :size => 20 %>
12
+ </p>
13
+
14
+ <ul>
15
+ <li><%= submit_tag 'Entrar' %></li>
16
+ </ul>
17
+ <% end %>
18
+ </div>
@@ -0,0 +1,6 @@
1
+ <h2 class='title'>Olá <%= current_user.usuario %>, selecione o setor pelo qual você deseja operar o sistema</h2>
2
+ <ul class='list'>
3
+ <% @lotacoes_temporarias.each do |lt| %>
4
+ <li><%= link_to lt.setor.nome, selecao_lotacao_temporaria_path(lt.id, :lotacao_selecionada => :sim) %></li>
5
+ <% end %>
6
+ </ul>
data/config/config.yml ADDED
@@ -0,0 +1,7 @@
1
+ development:
2
+ session_key: _camarapoa
3
+ secret: 6d3fb2a0cd7a049e27f77c8ca73fd590552776e47de47e3c7a44638bd4ab8add7140c11edd892a4d9d019d643a068c88d1a30c72b544b453ccdd8774a17ac589112081c779f51834a567314b95a0cdda01fe977b16440b721f6fde71ce0130b70c5bf90d1066bdef4e5ec08dca457522b0b399cf4567603b377efb28f701fc78
4
+
5
+ production:
6
+ session_key: _camarapoa
7
+ secret: 6d3fb2a0cd7a049e27f77c8ca73fd590552776e47de47e3c7a44638bd4ab8add7140c11edd892a4d9d019d643a068c88d1a30c72b544b453ccdd8774a17ac589112081c779f51834a567314b95a0cdda01fe977b16440b721f6fde71ce0130b70c5bf90d1066bdef4e5ec08dca457522b0b399cf4567603b377efb28f701fc78
data/config/routes.rb ADDED
@@ -0,0 +1,5 @@
1
+ ActionController::Routing::Routes.draw do |map|
2
+
3
+ map.resource :session, :path_names => { :new => 'entrar' }
4
+ map.selecao_lotacao_temporaria '/session/selecao_lotacao_temporaria/:pessoa_id', :controller => 'sessions', :action => 'selecao_lotacao_temporaria'
5
+ end
data/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'cmpa_auth'
@@ -0,0 +1,7 @@
1
+ module CmpaAuth
2
+
3
+ #
4
+ # Implementa uma classe de erro para exce��es de acesso proibido (erro HTML 403).
5
+ #
6
+ class AccessDenied < StandardError; end
7
+ end
@@ -0,0 +1,25 @@
1
+ module CmpaAuth
2
+ module Authentication
3
+
4
+ CLASS_NAMES = %w( Pessoa Estagiario Funcionario GrupoAcesso LotacaoTemporaria Setor Sistema )
5
+
6
+ #
7
+ # Realiza a autentica��o e retorna uma pessoa (usu�rio) caso o login e senha
8
+ # estejam corretos.
9
+ #
10
+ def self.authenticate(login, password)
11
+ user = ::Pessoa.first(:conditions => { :usuario => login })
12
+ user if user && login.present? && password.present? && Digest::SHA256.hexdigest(password + user.senha_salt) == user.senha_hash
13
+ end
14
+
15
+ #
16
+ # Retorna uma lista de sistemas dispon�veis para a lota��o tempor�ria em quest�o.
17
+ #
18
+ def self.allowed_systems(lotacao_temporaria_id)
19
+ lotacao_temporaria = ::LotacaoTemporaria.find(lotacao_temporaria_id)
20
+ lotacao_temporaria.grupos_acesso.inject([]) do |sistemas, grupo|
21
+ sistemas += grupo.sistemas.select { |s| !sistemas.include?(s) && s.status == 'ativo' }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,36 @@
1
+ module CmpaAuth
2
+
3
+ # Constr�i uma lista de modelos que j� existem na aplica��o.
4
+ implemented_klasses = Authentication::CLASS_NAMES.select do |klass|
5
+ File.exists? File.join(Rails.root, 'app', 'models', klass.underscore + '.rb')
6
+ end
7
+
8
+ # Este bloco ser� executado de duas formas distintas:
9
+ # * Em desenvolvimento ser� executado cada vez que a aplica��o for recarregada (a cada novo request)
10
+ # * Em produ��o ser� chamado somente uma vez para cada um dos modelos (assim que a aplica��o for inicializada)
11
+ ::ActionController::Dispatcher.to_prepare do
12
+ Authentication::CLASS_NAMES.each do |klass|
13
+
14
+ # M�dulo correspondente a classe em quest�o. e.g.: classe Pessoa, m�dulo CmpaAuth::Models::Pessoa.
15
+ module_const = "CmpaAuth::Models::#{klass}".constantize
16
+
17
+ if implemented_klasses.include? klass
18
+ klass.constantize.send(:include, module_const)
19
+
20
+ # O modelo n�o foi definido na aplica��o, ent�o deve-se cri�-lo dinamicamente
21
+ else
22
+ # Descobre qual a superclasse do modelo. Funcion�rio e Estagi�rio tem como superclasse a classe Pessoa.
23
+ superclass = %w[Estagiario Funcionario].include?(klass) ? ::Pessoa : ActiveRecord::Base
24
+
25
+ klass_const = Class.new(superclass)
26
+
27
+ # Para se evitar warnings no console no ambiente de desenvolvimento, remove-se o "nome"
28
+ # da classe antes de set�-la novamente.
29
+ Object.send(:remove_const, klass) if Object.const_defined?(klass)
30
+ Object.const_set(klass, klass_const).send(:include, module_const)
31
+ end
32
+ end
33
+ end
34
+ end
35
+
36
+ ::ActionController::Base.send(:include, CmpaAuth::RailsHelpers)
@@ -0,0 +1,6 @@
1
+ module CmpaAuth
2
+ module Models
3
+ module Estagiario
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,6 @@
1
+ module CmpaAuth
2
+ module Models
3
+ module Funcionario
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,17 @@
1
+ module CmpaAuth
2
+ module Models
3
+ module GrupoAcesso
4
+ def self.included(receiver) #:nodoc:
5
+ receiver.class_eval do
6
+
7
+ include CmpaAuth::PortalConnection
8
+
9
+ has_and_belongs_to_many :lotacoes_temporarias, :join_table => :grupoacessos_lotacoestemporarias, :foreign_key => :grupoacesso_id, :association_foreign_key => :lotacoestemporaria_id, :class_name => '::LotacaoTemporaria'
10
+ has_and_belongs_to_many :sistemas, :join_table => :grupoacessos_sistemas, :foreign_key => :grupoacesso_id, :class_name => '::Sistema'
11
+
12
+ set_table_name :grupoacessos
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,82 @@
1
+ module CmpaAuth
2
+ module Models
3
+ module LotacaoTemporaria
4
+ def self.included(receiver) #:nodoc:
5
+ receiver.class_eval do
6
+
7
+ include CmpaAuth::PortalConnection
8
+
9
+ belongs_to :setor, :class_name => '::Setor'
10
+ belongs_to :pessoa, :class_name => '::Pessoa'
11
+
12
+ has_and_belongs_to_many :grupos_acesso, :join_table => :grupoacessos_lotacoestemporarias, :foreign_key => :lotacoestemporaria_id, :association_foreign_key => :grupoacesso_id, :class_name => '::GrupoAcesso'
13
+
14
+ set_table_name :lotacoestemporarias
15
+
16
+ #
17
+ # Retorna todas as m�scaras da lota��o tempor�ria passada como par�metro.
18
+ #
19
+ def self.grupos_por_alias(lotacao_temporaria_id)
20
+ find(lotacao_temporaria_id).grupos_acesso.map(&:mascara)
21
+ end
22
+
23
+ private
24
+
25
+ #
26
+ # Define os m�todos que comecem com <i>in_groups_of</i> ou
27
+ # <i>role_of</i> e que terminam com um ponto de interroga��o.
28
+ # O objetivo � ser capaz de perguntar se determinada(s) m�scara(s)
29
+ # pertence(m) �s m�scaras dos grupos de acesso de uma lota��o
30
+ # tempor�ria. Retorna <tt>true/false</tt>.
31
+ #
32
+ # Opcionalmente voc� ainda pode incluir and's ou or's entre as
33
+ # m�scaras.
34
+ #
35
+ # Note que depois que o m�todo for definido o Ruby n�o chamar� mais
36
+ # esse m�todo (<tt>method_missing</tt>), o que torna essa uma
37
+ # solu��o bastante eficiente.
38
+ #
39
+ # <i>Sup�e-se que as m�scaras est�o em mai�sculas no banco de dados.</i>
40
+ #
41
+ # Exemplo:
42
+ #
43
+ # # Encontra uma lota��o tempor�ria.
44
+ # current_lotacao = LotacaoTemporaria.find(params[:id])
45
+ #
46
+ # # Lota��o atual possui a m�scara SUPER?.
47
+ # current_lotacao.role_of_super?
48
+ #
49
+ # # Lota��o atual possui as m�scaras SUPER e EDITOR?
50
+ # current_lotacao.role_of_super_and_editor?
51
+ #
52
+ # # Lota��o atual possui qualquer uma das m�scaras EDITOR ou FOTOGRAFO?
53
+ # current_lotacao.role_of_editor_or_fotografo?
54
+ #
55
+ def method_missing(name, *args, &block)
56
+ if name.to_s =~ /^in_groups_of_(\w+)\?$/ || name.to_s =~ /^role_of_(\w+)\?$/
57
+ group_names = $1
58
+ masks = grupos_acesso.map(&:mascara)
59
+ in_masks = lambda { |group| masks.include? group.upcase }
60
+
61
+ if group_names =~ /_and_(?!\w+_or_)/ # Grupos separados por _and_ mas n�o por _or_
62
+ define_method(name) { group_names.split('_and_').all? &in_masks }
63
+ elsif group_names =~ /_or_(?!\w+_and_)/ # Grupos separados por _or_ mas n�o por _and_
64
+ define_method(name) { group_names.split('_or_').any? &in_masks }
65
+ else # Somente um grupo
66
+ define_method(name) { masks.include? group_names.upcase }
67
+ end
68
+
69
+ send name # O m�todo <name> foi definido ent�o podemos cham�-lo.
70
+ else
71
+ super name, *args, &block
72
+ end
73
+ end
74
+
75
+ def define_method(name, &block) #:nodoc:
76
+ self.class.class_eval { define_method(name, &block) }
77
+ end
78
+ end
79
+ end
80
+ end
81
+ end
82
+ end
@@ -0,0 +1,26 @@
1
+ module CmpaAuth
2
+ module Models
3
+ module Pessoa
4
+ def self.included(receiver) #:nodoc:
5
+ receiver.class_eval do
6
+
7
+ include CmpaAuth::PortalConnection
8
+
9
+ set_table_name :pessoas
10
+
11
+ def lotacoes_temporarias_ativas
12
+ ::LotacaoTemporaria.all(:conditions => {:fim => nil, :pessoa_id => id})
13
+ end
14
+
15
+ def senha=(pass)
16
+ if pass != "senhaantiga" && pass.present?
17
+ salt = [Array.new(6){rand(256).chr}.join].pack("m").chomp
18
+ self.senha_salt = salt
19
+ self.senha_hash = Digest::SHA256.hexdigest(pass + salt)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ module CmpaAuth
2
+ module Models
3
+ module Setor
4
+ def self.included(receiver) #:nodoc:
5
+ receiver.class_eval do
6
+
7
+ include CmpaAuth::PortalConnection
8
+
9
+ has_many :lotacoes_temporarias, :foreign_key => :setor_id, :class_name => '::LotacaoTemporaria'
10
+ has_many :funcionarios, :through => :lotacoes_temporarias, :source => :pessoa
11
+
12
+ set_table_name :setores
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,18 @@
1
+ module CmpaAuth
2
+ module Models
3
+ module Sistema
4
+ def self.included(receiver) #:nodoc:
5
+ receiver.class_eval do
6
+
7
+ include CmpaAuth::PortalConnection
8
+
9
+ default_scope :order => :nome
10
+
11
+ has_and_belongs_to_many :grupos_acesso, :join_table => :grupoacessos_sistemas, :association_foreign_key => :grupoacesso_id, :class_name => '::GrupoAcesso'
12
+
13
+ set_table_name :sistemas
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,21 @@
1
+ module CmpaAuth
2
+
3
+ #
4
+ # Este m�dulo � inclu�do em todos os modelos do cmpa_auth, exceto aqueles
5
+ # que herdam de uma classe que j� o contenha, como � o caso dos modelos
6
+ # +Estagiario+ e +Funcionario+.
7
+ #
8
+ module PortalConnection
9
+ def self.included(receiver) #:nodoc:
10
+
11
+ # Estabelece uma conex�o em um banco qualquer, configurado com +cmpa_auth+.
12
+ # Caso esta configura��o n�o seja v�lida ent�o � utilizado o mesmo banco
13
+ # do environment atual.
14
+ begin
15
+ receiver.establish_connection :cmpa_auth
16
+ rescue Exception
17
+ receiver.establish_connection ::Rails.env
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,56 @@
1
+ module CmpaAuth
2
+
3
+ #
4
+ # Implementa a autentica��o atrav�s de um before_filter.
5
+ # Todo o controle � realizado atrav�s de dois ids armazenados na
6
+ # sess�o: current_user_id e lotacao_temporaria_id.
7
+ #
8
+ # O m�dulo tamb�m oferece suporte a algumas facilidades, como perguntar
9
+ # se o usu�rio est� logado.
10
+ #
11
+ module RailsHelpers
12
+ def self.included(receiver) #:nodoc:
13
+ receiver.class_eval do
14
+
15
+ before_filter :check_authentication
16
+ helper_method :current_user, :current_lotacao, :logged_in?
17
+
18
+ rescue_from CmpaAuth::AccessDenied, :with => lambda { render_403 }
19
+
20
+ #
21
+ # Renderiza uma mensagem de erro HTML to tipo 403 (proibido) nos casos
22
+ # em que a exce��o CmpaAuth::AccessDenied for disparada.
23
+ #
24
+ def render_403
25
+ render :template => "errors/error_403", :status => 403, :layout => false
26
+ end
27
+
28
+ private
29
+
30
+ def check_authentication
31
+ redirect_to new_session_url unless logged_in?
32
+ end
33
+
34
+ #
35
+ # Retorna o usu�rio logado na sess�o.
36
+ #
37
+ def current_user
38
+ @current_user ||= ::Pessoa.find_by_id(session[:current_user_id])
39
+ end
40
+
41
+ #
42
+ # Retorna a lota��o tempor�ria atual (aquela que o usu�rio escolheu ao
43
+ # logar no sistema).
44
+ #
45
+ def current_lotacao
46
+ @current_lotacao ||= ::LotacaoTemporaria.find_by_id(session[:lotacao_temporaria_id])
47
+ end
48
+
49
+ # Verifica se o usu�rio est� logado.
50
+ def logged_in?
51
+ current_user && current_lotacao
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
data/lib/cmpa_auth.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'digest/sha2'
2
+
3
+ require 'cmpa_auth/models/estagiario'
4
+ require 'cmpa_auth/models/funcionario'
5
+ require 'cmpa_auth/models/grupo_acesso'
6
+ require 'cmpa_auth/models/lotacao_temporaria'
7
+ require 'cmpa_auth/models/pessoa'
8
+ require 'cmpa_auth/models/setor'
9
+ require 'cmpa_auth/models/sistema'
10
+
11
+ require 'cmpa_auth/access_denied'
12
+ require 'cmpa_auth/authentication'
13
+ require 'cmpa_auth/portal_connection'
14
+ require 'cmpa_auth/rails_helpers'
15
+
16
+ require 'cmpa_auth/extensions'
17
+
18
+ # Copia as imagens dos sistemas para a pasta public/images/sistemas da aplicação.
19
+ images_src = File.join(File.dirname(__FILE__), '../public/images/sistemas/*')
20
+ images_dst = "#{Rails.public_path}/images/sistemas/"
21
+ FileUtils.mkdir_p images_dst
22
+ FileUtils.cp_r Dir.glob(images_src), images_dst
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
data/rails/init.rb ADDED
@@ -0,0 +1 @@
1
+ require 'cmpa_auth'
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: cmpa_auth
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.2
5
+ platform: ruby
6
+ authors:
7
+ - "CMPA Assessoria de Inform\xC3\xA1tica"
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2009-11-10 00:00:00 -02:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: "Biblioteca de autentica\xC3\xA7\xC3\xA3o para a Assessoria de Inform\xC3\xA1tica (CMPA)."
17
+ email: icaro.ldm@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files:
23
+ - README.rdoc
24
+ - CHANGELOG.rdoc
25
+ files:
26
+ - init.rb
27
+ - README.rdoc
28
+ - CHANGELOG.rdoc
29
+ - MIT-LICENSE
30
+ - rails/init.rb
31
+ - lib/cmpa_auth/access_denied.rb
32
+ - lib/cmpa_auth/authentication.rb
33
+ - lib/cmpa_auth/extensions.rb
34
+ - lib/cmpa_auth/models/estagiario.rb
35
+ - lib/cmpa_auth/models/funcionario.rb
36
+ - lib/cmpa_auth/models/grupo_acesso.rb
37
+ - lib/cmpa_auth/models/lotacao_temporaria.rb
38
+ - lib/cmpa_auth/models/pessoa.rb
39
+ - lib/cmpa_auth/models/setor.rb
40
+ - lib/cmpa_auth/models/sistema.rb
41
+ - lib/cmpa_auth/portal_connection.rb
42
+ - lib/cmpa_auth/rails_helpers.rb
43
+ - lib/cmpa_auth.rb
44
+ - app/controllers/sessions_controller.rb
45
+ - app/helpers/sessions_helper.rb
46
+ - app/views/errors/error_403.html.erb
47
+ - app/views/layouts/sessions.html.erb
48
+ - app/views/sessions/index.html.erb
49
+ - app/views/sessions/new.html.erb
50
+ - app/views/sessions/selecao_lotacao_temporaria.html.erb
51
+ - config/config.yml
52
+ - config/routes.rb
53
+ - public/images/sistemas/administrativo.png
54
+ - public/images/sistemas/agenda.png
55
+ - public/images/sistemas/aviso.png
56
+ - public/images/sistemas/central_transportes.png
57
+ - public/images/sistemas/controle_acesso.png
58
+ - public/images/sistemas/convenios.png
59
+ - public/images/sistemas/cotas.png
60
+ - public/images/sistemas/cursos_eventos.png
61
+ - public/images/sistemas/dados_pessoais.png
62
+ - public/images/sistemas/efetividade.png
63
+ - public/images/sistemas/formulario.png
64
+ - public/images/sistemas/helpdesk.png
65
+ - public/images/sistemas/movimentacao_pessoal.png
66
+ - public/images/sistemas/ouvidoria.png
67
+ - public/images/sistemas/pesquisa.png
68
+ - public/images/sistemas/pesquisa_organizacional.png
69
+ - public/images/sistemas/processo_eletronico.png
70
+ - public/images/sistemas/qbm.png
71
+ - public/images/sistemas/seguranca.png
72
+ - public/images/sistemas/sms.png
73
+ - public/images/sistemas/telefonia.jpg
74
+ - public/images/sistemas/telephone.png
75
+ - public/images/sistemas/video.png
76
+ has_rdoc: true
77
+ homepage:
78
+ licenses: []
79
+
80
+ post_install_message:
81
+ rdoc_options: []
82
+
83
+ require_paths:
84
+ - lib
85
+ required_ruby_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
90
+ version:
91
+ required_rubygems_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: "0"
96
+ version:
97
+ requirements: []
98
+
99
+ rubyforge_project:
100
+ rubygems_version: 1.3.5
101
+ signing_key:
102
+ specification_version: 3
103
+ summary: "Adiciona uma solu\xC3\xA7\xC3\xA3o completa de autentica\xC3\xA7\xC3\xA3o e permiss\xC3\xB5es."
104
+ test_files: []
105
+