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