CmpaAuth
Biblioteca de autentica??o para a Assessoria de Inform?tica (C?mara Municipal de Porto Alegre).
Quando a aplica??o for inicializada uma s?rie de coisas estar? dispon?vel.
-
Controllers
-
ApplicationController: respons?vel pela autentica??o, redirecionamento de exce??es e implementa??o de alguns helpers (ex.: logged_in?, current_user, etc)
-
SessionsController: respons?vel pela exibi??o das telas de login e lota??es tempor?rias. Tamb?m respons?vel pelo logout.
-
-
Views
-
Layouts: um layout gen?rico ? utilizado para a autentica??o e para a sele??o de lota??es tempor?rias.
-
Errors: cont?m telas com mensagens de erro. Atualmente com suporte ao erro 403 (forbidden).
-
-
Routes
-
Um resource padr?o para uma session. Na se??o "Exemplos de Uso" h? uma descri??o dessas rotas e como utiliz?-las.
-
-
Public
-
Uma pasta (sistemas) ser? copiada para a pasta public/images da aplica??o contendo as imagens de cada sistema.
-
Exemplos de Uso
Configura??o
No arquivo config/environment.rb adicione a seguinte linha de c?digo no bloco de inicializa??o:
config.gem 'cmpa_auth', :source => 'http://gemcutter.org'
Models
Para tornar as nossas vidas mais simples, n?o ? preciso criar os modelos abaixo. Caso eles j? tenham sido declarados na aplica??o os seus m?todos/constantes ser?o "mesclados".
-
Estagiario
-
Funcionario
-
GrupoAcesso
-
LotacaoTemporaria
-
Pessoa
-
Setor
-
Sistema
Controllers e Views
Nesse momento voc? j? ? capaz de utilizar todas as funcionalidades do cmpa_auth. Vamos supor que voc? queira perguntar se o usu?rio est? logado. Simples, utilize o helper logged_in?
. Para pegar o usu?rio logado, o qual ? do tipo Pessoa
ou a lota??o tempor?ria que ele escolheu ao entrar no sistema, utilize, respectivamente, os helpers current_user
e current_lotacao
.
Para saber se a lota??o atual est? no grupo de acesso SUPER, voc? pode perguntar:
current_lotacao.role_of_super?
Ou se quiser saber se a lota??o atual est? nos grupo de acesso SUPER
e/ou no grupo de acesso REDATOR
, pergunte:
current_lotacao.role_of_super_and_redator?
current_lotacao.role_of_super_or_redator?
O importante ? notar que esses m?todos s?o criados atrav?s de method_missing
e, portanto, para utiliz?-los voc? deve seguir algumas regras.
-
Chamar um m?todo que comece com in_groups_of / role_of e termine com um ponto de interroga??o.
-
Os grupos de acesso s?o os nomes separados por um and ou por um or (n?o ambos). ? feito um upcase em cada um desses grupos, ou seja, no banco de dados esses nomes devem estar em caixa alta. Exemplo:
# ? uma chamada inv?lida, pois n?o h? como saber se queremos testar # "SUPER" && ("REDATOR" || "EDITOR") ou se queremos testar # ("SUPER" && "REDATOR") || "EDITOR" current_lotacao.role_of_super_and_redator_or_editor?
Uma boa pr?tica ? criar um helper para esse teste e n?o ficar fazendo a mesma chamada repetidas vezes... Por exemplo, no ApplicationController
.
helper_method :redator?, :fotografo?
private
def redator?
current_lotacao.role_of_super_and_redator?
end
def fotografo?
current_lotacao.role_of_super_and_fotografo?
end
Ent?o na view podemos perguntar:
- if fotografo? || redator?
...
Routes, Login e Logout
Como o cmpa_auth utiliza a capacidade do Rails de trabalhar com engines, voc? tem acesso autom?tico a algumas rotas para realizar as opera??es de login e logout.
Para realizar logout e supondo que o usu?rio j? esteja logado, voc? pode oferecer o seguinte link na view:
= link_to 'sair', session_path, :method => :delete
Login
A tela de login ? exibida automaticamente caso o usu?rio n?o esteja logado, a n?o ser que voc? queira que certas actions de um determinado controller n?o rodem o before_filter
. Isso ? feito sobrescrevendo o pr?prio filtro (cmpa_authenticate) no controller. Por exemplo:
class PostController < ApplicationController
before_filter :cmpa_authenticate, :except => :index
end
class NewsController < ApplicationController
before_filter :cmpa_authenticate, :only => [:new, :create, :edit, :update]
end
Copyright (c) 2009 CMPA - Assessoria de Inform?tica