Avançar para a área de conteúdo

ir para o conteúdo principal

developerWorks Brasil  >  Software livre | Tivoli  >

Use Ruby on Rails to create an LDAP directory service in Tivoli Directory Server V6.0

Incluir, atualizar, procurar e excluir entradas de diretórios com Net::LDAP Ruby gem

developerWorks
Opções de documento

Opções de documento que necessitam de JavaScript não são exibidas

Código de amostra


Classificar esta página

Ajude-nos a melhorar este conteúdo


Nível: Intermediário

Deepak Vohra, Web Developer, Independent Consultant

28/Abr/2009

Neste artigo, aprenda como usar a biblioteca do Net::LDAP para criar um serviço de diretório Lightweight Directory Access Protocol (LDAP) no servidor de diretórios IBM® Tivoli® Directory Server V6.0. Execute os exemplos para incluir, modificar, procurar e excluir uma entrada de diretório com a biblioteca do Net::LDAP Ruby. Crie um aplicativo Ruby on Rails usando o Tivoli Directory Server V6.0 como um banco de dados de backend.

Introdução

O Tivoli Directory Server é um servidor de diretórios com base no LDAP V3 usado para criar serviços de diretórios. Um serviço de diretório é um aplicativo que armazena, recupera e modifica informações sobre os recursos de rede. LDAP, um protocolo leve para acesso a serviços de diretórios, é baseado em entradas. Uma entrada é um conjunto de atributos identificados por um nome distinto (DN) globalmente exclusivo. Cada atributo de entrada de diretório possui um tipo e um ou mais valores. Neste artigo, aprenda como usar a biblioteca do Net::LDAP para criar um serviço de diretório LDAP no servidor de diretórios Tivoli Directory Server V6.0. Execute um exemplo para criar um aplicativo Ruby on Rails usando o Tivoli Directory Server V6.0 como um banco de dados de backend.

Pré-requisitos e Requisitos do Sistema

Uma compreensão básica sobre LDAP e linguagens de script é necessária. Este artigo é principalmente para aqueles que conhecem um pouco sobre LDAP e precisam escrever em um serviço de diretório usando a linguagem de script Ruby. Para executar os exemplos neste artigo, o Tivoli Directory Server V6.0 deve estar instalado. Faça o download do aplicativo LDAP de exemplo para este artigo.



Voltar para parte superior


Sobre o Ruby on Rails

Ruby on Rails é uma estrutura Web de software livre para desenvolvimento de aplicativos da Web com base em um banco de dados. O Ruby on Rails proporciona facilidade de desenvolvimento, suporte ao Ajax e uma estrutura Model-View-Controller (MVC). Ruby é uma linguagem de script orientada a objetos interpretada. Interpretativo significa que um aplicativo Ruby é executado sem antes compilar o aplicativo. As variáveis no Ruby não possuem um tipo; uma variável Ruby pode conter dados de qualquer tipo. As variáveis no Ruby não necessitam de declarações de variáveis. O Ruby, sendo uma linguagem orientada a objetos, possui recursos como classes, métodos e herança.

Para desenvolver um aplicativo Ruby on Rails, são necessários um servidor da Web e um banco de dados. O Rails inclui um servidor da Web integrado chamado WEBrick. O Rails é configurado com o banco de dados MySQL por padrão. O Rails é uma combinação dos seguintes subprojetos.

Modelo — Active Record
Modelos modelam objetos de negócios em um aplicativo MVC. No Rails, os modelos são, geralmente, baseados no padrão do Active Record, que fornece o object-relational mapping (ORM) entre objetos de negócios e um banco de dados.
Visualização — Action View
Visualizações são as interfaces com o usuário de um aplicativo da Web do Ruby on Rails. Uma visualização é processada usando RHTML ou RXML. RHTML é um HTML integrado do Ruby, e RXML é o XML gerado pelo Ruby. Uma visualização contém links para métodos (ações) definidos no controlador com o qual as ações do controlador são chamadas.
Controlador— Action Controller
O controlador configura variáveis de instâncias necessárias para uma visualização e processa uma visualização. O controlador é uma classe que estende a classe ApplicationController e consiste de ações (métodos). Um controlador integra o modelo com a visualização usando métodos (ações) públicos.

O modelo fornece os dados, o controlador fornece a lógica de negócios para processar os dados e a visualização apresenta os dados.

Um aplicativo MVC Rails consiste dos seguintes Ruby, RHTML e arquivos de configuração:

  • Visualizar modelos (arquivos .rhtml) no diretório app/views
  • Classe de modelo no diretório app/models
  • Classe de controlador no diretório app/controllers
  • Arquivo de configuração do banco de dados (database.yml) no diretório config

O Ruby on Rails fornece comandos para a geração de scripts de modelo e do controlador. Alguns dos comandos Ruby on Rails mais usados são mostrados abaixo.


Tabela 1. Comandos Comuns do Ruby on Rails
Comando (variáveis em itálico)Descrição
rails applicationnameCria um aplicativo Rails com o nome especificado
ruby script/server Inicia o servidor da Web WEBrick do Ruby Rails em http://localhost:3000
ruby script/generate model modelnameGera uma classe de modelo com o nome de modelo especificado
ruby script/generate controller controllername
controlleraction1
controlleraction2
...
Gera uma classe de controlador com o nome especificado e gera as ações do controlador, se especificadas; modelos de visualização (arquivos .rhtml) correspondentes às ações do controlador também são gerados

O Ruby on Rails fornece várias bibliotecas Ruby para o desenvolvimento de aplicativos LDAP. Por exemplo:

  • Ruby/ActiveLDAP fornece uma interface orientada a objetos para LDAP com entradas LDAP mapeadas para objetos Ruby.
  • Net::LDAP é uma biblioteca Ruby de suporte ao LDAP e suporta recursos clientes LDAP.

Neste artigo, aprenda a usar a biblioteca Net::LDAP para criar um serviço de diretório no servidor de diretórios Tivoli Directory Server V6.0. Você incluirá, modificará, procurará e excluirá uma entrada de diretório com a biblioteca Net::LDAP Ruby.



Voltar para parte superior


Installation

Esta seção mostra como instalar o Ruby, a estrutura Rails e RubyGems. RubyGems é o gerenciador de pacotes padrão do Ruby usado com aplicativos e bibliotecas Ruby. Você também instalará o Net::LDAP, a biblioteca de classes do Ruby para LDAP. O aplicativo de exemplo usa a plataforma® Windows. A ordem da instalação é primeiro instalar o Ruby, em seguida o Rails e, então, o Net::LDAP.

Instalação Básica do Ruby

Para instalar a versão mais recente do Ruby e RubyGems:

  1. Faça o download do aplicativo Ruby Windows Installer. O Ruby V1.8.5-21 foi usado para desenvolver o aplicativo do serviço de diretório de exemplo neste artigo.
  2. Clique duas vezes no aplicativo ruby185-21.exe . O Assistente de Configuração do Ruby será iniciado.
  3. Clique em Avançar e aceite o contrato de licença. Selecione os componentes padrão para instalação, que incluem o gerenciador de pacotes RubyGems, e clique em Avançar.
  4. Especifique um diretório para instalação do Ruby (o padrão é c:/ruby) e clique em Avançar.
  5. Clique em Instalar. Ruby e RubyGems serão instalados.

Rails

Instalar o Rails:

  1. Altere o diretório (Cd) para o diretório c:/ruby, no qual o Ruby está instalado.
  2. Execute o seguinte comando para instalar o Rails e as dependências: c:/ruby>gem install rails --include-dependencies.

O pacote Net::LDAP

Instale o ruby-net-ldap gem com:

C:/ruby>gem install ruby-net-ldap

A classe Net::LDAP fornece uma implementação Ruby do protocolo do cliente LDAP. A classe Net::LDAP é usada para ligar, procurar, incluir, modificar, excluir e renomear operações. Os métodos da classe Net::LDAP são descritos na Tabela 2.


Tabela 2. Métodos da Classe Net::LDAP
MétodoDescrição
add(args)Inclui uma nova entrada de diretório. Os argumentos são:
  • :dn — DN (nome distinto) da nova entrada
  • :attrs — Atributos da nova entrada especificados como um hash
add_attribute(dn, attribute, value)Incluir um valor em um atributo. Se o atributo especificado ainda não estiver definido, cria um novo atributo.
authenticate(username, password)Especifica as credenciais de autenticação para o servidor LDAP.
bind(auth=@auth)Conecta-se ao servidor LDAP e solicita autenticação com base nas credenciais de autenticação especificadas no método aberto ou novo método. Retorna true se uma conexão com o servidor LDAP for estabelecida.
bind_as(args={})Liga como um usuário especificado.
delete(args)Exclui uma entrada de diretório para um DN especificado, o qual é o único argumento suportado.
delete_attribute(dn, attribute)Exclui um atributo e todos os seus valores. O parâmetro dn especifica a entrada de diretório e o atributo especifica o atributo para exclusão.
get_operation_result() Retorna o código e a mensagem de resultado de uma operação para as operações de ligação, procura, inclusão, modificação, renomeação e exclusão.
modify(args) Modifica os valores de atributos para uma entrada de diretório especificada. Assume os seguintes argumentos como um hash:
  • :dn — o DN da entrada de diretório para modificação.
  • :operations — as modificações, cada uma delas é especificada como uma matriz consistindo dos seguintes elementos:
    • Operador — pode ser :add, :replace ou :delete
    • Nome do atributo — o atributo a ser modificado
    • Valor do atributo — o valor do atributo
new(args = {})Cria um objeto do tipo Net::LDAP, mas não abre uma conexão com o servidor. Os argumentos podem ser:
  • :host - host do servidor LDAP, padrão para localhost.
  • :port - porta do servidor LDAP, padrão para 389.
  • :auth - um hash contendo parâmetros de autorização.



Voltar para parte superior


Criando um Aplicativo Rails

Nesta seção, crie um aplicativo Rails para criar um serviço de diretório com a biblioteca Net::LDAP Ruby. Use o comando rails para criar um aplicativo Rails chamado netldap:

c:/ruby>rails netldap

Um aplicativo Rails com a estrutura de diretórios completa do aplicativo Rails é criado. Você executará o aplicativo Net::LDAP Ruby on Rails como um script de controlador com ações do controlador para criação de uma entrada de diretório, modificando uma entrada de diretório, procurando uma entrada de diretório e excluindo uma entrada de diretório. Você também criará modelos de visualização RHTML correspondentes a cada uma dessas ações do controlador para entrar dados para as entradas de diretórios.

Crie um script de controlador chamado directory que consiste em ações do controlador add_entry, modify_entry, search_entry e delete_entry:

C:/ruby/netldap>ruby script/generate controller directory
add_entry modify_entry search_entry delete_entry

Um script de controlador chamado directory_controller.rb é criado no diretório controllers. O script de controlador consiste em ações do controlador add_entry, modify_entry, search_entry e delete_entry. Os modelos de visualizações add_entry.rhtml, modify_entry.rhtml, search_entry.rhtml e delete_entry.rhtml são criados na pasta visualizações.

Nas seções a seguir, modifique as ações do controlador e os modelos de visualizações para incluir, modificar, procurar e excluir uma entrada de diretório.



Voltar para parte superior


Criando uma entrada de diretório

A próxima etapa é criar uma entrada de diretório no Tivoli Directory Server. Uma entrada de diretório consiste em atributos e valores de atributos. O DN de uma entrada de diretório representa o nome distinto para a entrada de diretório. Um DN consiste no nome distinto relativo e no DN base. Para o exemplo, crie uma entrada de diretório no DN raiz/base cn=localhost .

Inicie a instância do Tivoli Directory Server se ela ainda não estiver iniciada.

Cada entrada de diretório é identificada com um atributo dn . Os atributos objectClass especificam o tipo dos dados e os atributos necessários e opcionais em uma entrada. As classes de objetos formam uma hierarquia de classes; algumas das classes geralmente usadas são top, organization e organizationalPerson. Todas as classes de objetos são subclasses da classe de objeto top. Você criará um serviço de diretório com as classes de objetos top, person e organizationalPerson :

  • top não possui nenhum atributo necessário.
  • person possui os atributos necessários cn e sn.
  • organizationalPerson não possui nenhum atributo necessário. Alguns dos atributos que podem ser especificados em uma entrada de diretório da classe de objeto organizationalPerson são title e telephoneNumber.

Modifique o modelo de visualização add_entry.rhtml para entrada de dados para a entrada de diretório. Defina uma formulário com o método form_tag da classe FormTagHelper . Defina um campo no formulário com o método text_field(object_name, method, options = {}) . O parâmetro de método object representa um objeto para o modelo de formulário. O parâmetro method representa um campo de formulário como um atributo do objeto de formulário. Por exemplo, o seguinte campo de texto:

text_field("directory_entry", "title", "size" => 20)

converte para o campo de texto no formato HTML:

<input type="text" id="directory_entry_title" name="directory_entry[title]" size="20"
value="#{@directory_entry.title}" />

Inclua campos de texto para primeiro nome, último nome, título, número de telefone, departamento e número de fax no add_entry.rhtml.

Campo de TextoAtributo
Primeiro Nome gn
Último Nome sn
Título title
Número de Telefone telephoneNumber
Departamento physicalDeliveryOfficeName
Número de FAX facsimileTelephoneNumber

A lista 1 mostra o add_entry.rhtml.


Lista 1. add_entry.rhtml
            
<html>
<body>

<div>
    <table border='0' cellspacing='0' cellpadding='5'>
       <tr>
         <caption>
           Add Directory Entry
         </caption>
       </tr>
          <!-- start_form_tag -->
     <%= form_tag :action => "add_entry" %>
       <tr>
          <td>First Name*</td>
          <td><%= text_field(:add_entry, :gn) %></td>
       </tr><tr>
           <td>Last Name*</td>
           <td><%= text_field(:add_entry, :sn) %></td>
       </tr>

       <tr>
           <td>Title</td>
           <td><%= text_field(:add_entry, :title) %></td>
       </tr><tr>
           <td>Telephone Number</td>
           <td><%= text_field(:add_entry, :telephoneNumber) %></td>
       </tr>

       <tr>
           <td>Department</td>
           <td><%= text_field(:add_entry, :physicalDeliveryOfficeName) %></td>
       </tr>


       <tr>
            <td>Fax Number</td>
            <td><%= text_field(:add_entry, :facsimileTelephoneNumber) %></td>
       </tr>


       <tr>
            <td><input type="submit" value="Submit"></td>
       </tr>
     <%= end_form_tag %>
     </table>
        </div>
* indica um campo necessário.
</body>
</html>

Modifique a ação do controlador add_entry e recupere os valores dos parâmetros. Recupere o primeiro nome (:gn) e o último nome (:sn) e defina uma variável cn.

values = params[:add_entry]
    gn=values[:gn]
    sn= values[:sn]
    cn=gn+sn

Defina o nome distinto para a entrada de diretório, dn, a qual consiste em rdn e o DN base.

dn="cn="+cn+",cn=localhost"

Recupere os valores para os outros campos do formulário.

title=values[:title]
telephoneNumber=values[:telephoneNumber]
physicalDeliveryOfficeName=values[:physicalDeliveryOfficeName]
facsimileTelephoneNumber=values[:facsimileTelephoneNumber]

Defina uma variável, attr, que consiste em atributos diferentes da entrada de diretório.

attr = {
   :cn => cn,
   :objectclass => ['top', 'person', 'organizationalPerson'],
   :sn => sn,
   :title => title,
   :telephoneNumber => telephoneNumber,
   :physicalDeliveryOfficeName => physicalDeliveryOfficeName,
   :facsimileTelephoneNumber => facsimileTelephoneNumber
    }

Abra uma conexão para o Tivoli Directory Server e inclua a entrada de diretório no servidor usando o método add() .

Net::LDAP.open( :host => 'localhost', :port => 389,:base =>
'cn=localhost', :auth => { :method => :simple, :username => 'cn=root',
:password => 'tivoli' } ) do |ldap| ldap.add( :dn => dn, :attributes => attr ) end

Crie uma entrada de diretório com o modelo add_entry.rhtml. Inicie o servidor WEBrick com o seguinte comando:

C:/ruby/netldap>ruby script/server

Invoque o modelo de visualização add_entry.rhtml com a URL http://localhost:3000/directory/add_entry.rhtml. Especifique os valores para os atributos diferentes e clique em Submeter, conforme mostrado abaixo.


Figura 1. Incluindo uma Entrada de Diretório
Incluindo uma Entrada de Diretório

Uma entrada de diretório é criada na entrada de diretório cn=localhost na instância do Tivoli Directory Server. Selecione a entrada de diretório cn=localhost na Ferramenta de Administração da Web e clique em Expandir, conforme mostrado abaixo.


Figura 2. Lista de entradas de diretórios para cn=localhost
Lista de entradas de diretórios para cn=localhost

O diretório que foi incluído usando Ruby on Rails é listado nas entradas de diretórios na entrada de diretório cn=localhost . Para listar os atributos da entrada de diretório, selecione a entrada de diretório e clique em Editar Atributos.


Figura 3. Lista de atributos para a entrada de diretório incluída
Lista de atributos para a entrada de diretório incluída

Os atributos da entrada de diretório incluída são exibidos.


Figura 4. Exibindo atributos para a entrada de diretório
Exibindo atributos para a entrada de diretório



Voltar para parte superior


Modificando uma Entrada de Diretório

Nesta seção, modifique uma entrada de diretório. Os dados a serem modificados são inseridos no modify_entry.rhtml. Semelhante à inclusão de uma entrada, inclua um formulário no modelo de visualização modify_entry.rhtml com o método form_tag da classe FormTagHelper . Inclua campos de formulário com o método text_field da classe FormHelper . A Lista 2 mostra o modelo de visualização modify_entry.rhtml.


Lista 2. modify_entry.rhtml
    
<html>
<body>

<div>
    <table border='0' cellspacing='0' cellpadding='5'>
       <tr>
         <caption>
             Modify Directory Entry
         </caption>
       </tr>
    <!-- start_form_tag -->
     <%= form_tag :action => "modify_entry" %>
       <tr>
            <td>First Name*</td>
            <td><%= text_field(:modify_entry, :gn) %></td>
       </tr><tr>
            <td>Last Name*</td>
            <td><%= text_field(:modify_entry, :sn) %></td>
       </tr>

       <tr>
            <td>Title</td>
            <td><%= text_field(:modify_entry, :title) %></td>
       </tr><tr>
            <td>Telephone Number</td>
            <td><%= text_field(:modify_entry, :telephoneNumber) %></td>
       </tr>

       <tr>
            <td>Department</td>
            <td><%= text_field(:modify_entry, :physicalDeliveryOfficeName) %></td>
       </tr>


       <tr>
            <td>Fax Number</td>
            <td><%= text_field(:modify_entry, :facsimileTelephoneNumber) %></td>
       </tr>


       <tr>
            <td><input type="submit" value="Submit"></td>
       </tr>
   <%= end_form_tag %>
  </table>
        </div>
* indica um campo necessário.
</body>
</html>

Quando o modelo modify_entry.rhtml é submetido, a ação de controlador modify_entry do controlador directory é invocada. Modifique a ação de controlador modify_entry .

Recupere os valores para os campos de formulário :gn e :sn, e defina uma variável cn.

values = params[:modify_entry]
    gn=values[:gn]
    sn= values[:sn]
    cn=gn+sn

Uma entrada de diretório é identificada com um nome distinto. Defina o DN da entrada de diretório para modificação.

dn="cn="+cn+",cn=localhost"

Recupere os valores dos outros campos de formulário.

title=values[:title]
telephoneNumber=values[:telephoneNumber]
physicalDeliveryOfficeName=values[:physicalDeliveryOfficeName]
 facsimileTelephoneNumber=values[:facsimileTelephoneNumber]

Abra uma conexão com o Tivoli Directory Server e substitua os valores de atributos com o método replace_attribute . Por exemplo, o atributo :title é substituído da seguinte forma:

Net::LDAP.open( :host => 'localhost', :port => 389,:base =>
'cn=localhost', :auth => { :method => :simple, :username => 'cn=root',
:password => 'tivoli' } ) do |ldap| ldap.replace_attribute dn, :title, title end

Uma entrada de diretório é modificada a partir do modelo de visualização modify_entry.rhtml. Inicie o servidor da Web WEBrick e invoque o modelo de visualização modify_entry.rhtml com a URL http://localhost:3000/directory/modify_entry.rhtml. Especifique a entrada de diretório a ser modificada e os atributos modificados. Clique em Submeter, conforme mostrado abaixo.


Figura 5. Modificando uma entrada de diretório
Modificando uma entrada de diretório

A entrada de diretório é modificada conforme mostrada na Ferramenta de Administração da Web.


Figura 6. Entrada de diretório modificada
Entrada de diretório modificada



Voltar para parte superior


Procurando um Diretório

Esta seção explora como procurar por uma entrada de diretório. Você exibirá o resultado da procura de diretório na mesma página em que os dados da entrada de diretório são inseridos usando a técnica Web do Ajax. A técnica Web do Ajax é implementada pela biblioteca de prototype. A biblioteca prototype inclui a classe PrototypeHelper para criar um formulário que possa ser atualizado de forma assíncrona usando o Ajax. Inclua a biblioteca prototype no modelo de visualização search_entry.rhtml.

<%= javascript_include_tag "prototype" %>

Inclua um formulário submetido usando Ajax com o método form_remote_tag da classe PrototypeHelper . A opção :update do form_remote_tag especifica o elemento do formulário a ser atualizado com a resposta do servidor. A opção :url especifica a URL para a qual o formulário é submetido e a ação do controlador é especificada com o parâmetro :action .

<%=form_remote_tag(:update=>"directory_entry",
:url=>{:action=>:search_entry}) %>
<% end_form_tag %>

Especifique os campos de entrada da entrada de diretório com o método text_field_tag da classe FormTagHelper . O elemento do formulário a ser atualizado é especificado como um div.

<div id="directory_entry"></div>

O modelo de visualização search_entry.rhtml é mostrado na Lista 3.


Lista 3. search_entry.rhtml
    
<html><head>
    <title></title>
    <%= javascript_include_tag "prototype" %>
  </head>

<body>
     <caption>
      Search  Directory Entry
     </caption>
    <%=form_remote_tag(:update=>"directory_entry",
           :url=>{:action=>:search_entry}) %>
     <table>
           <tr>
     <label>First Name*</label>
    <%=text_field_tag:firstName %></tr>
       <tr><label>Last Name</label>
    <%=text_field_tag:lastName %></tr>
      <%=submit_tag "Search" %>
    </table>
     <caption>
         <b> Directory Entry Table</b>
     </caption>

   <div id="directory_entry"></div>
   <% end_form_tag %>
        * indica um campo necessário.
</body>

</html>

Quando o formulário search_entry.rhtml é submetido, a ação de controlador search_entry do controlador de diretório é invocada. Modifique a ação search_entry . Recupere os valores dos campos :gn e :sn e defina o DN base da entrada de diretório para procura.

gn=values[:gn]
 sn= values[:sn]
cn=gn+sn
treebase= "cn="+cn+",cn=localhost"

Especifique os atributos da entrada de diretório para recuperação.

attrs = ["cn", "sn","title", "telephoneNumber","physicalDeliveryOfficeName",
"facsimileTelephoneNumber"]

Abra uma conexão com o Tivoli Directory Server e procure pela entrada de diretório especificada usando o método search da classe Net::LDAP.

Net::LDAP.open( :host => 'localhost', :port => 389,:base =>
'cn=localhost', :auth => { :method => :simple, :username =>
'cn=root',

:password =>'tivoli' } ) do |ldap| ldap.search( :base => treebase, :attributes => attrs, :return_result => true ) do |directory| end

O método search retorna um conjunto de resultados. Itere sobre o conjunto de resultados e crie uma tabela HTML para envio como uma resposta para o modelo de visualização search_entry.rhtml. Por exemplo, uma linha para o atributo cn é incluída na tabela.

directoryEntry+="<tr>"
directoryEntry+="<td>cn</td>"
directoryEntry+="<td>"+"#{directory.cn}"+"</td>"
directoryEntry+="</tr>"

Invoque o modelo de visualização search_entry.rhtml com a URL http://localhost:3000/directory/search_entry.rhtml para procurar por uma entrada de diretório. Especifique os atributos :gn e :sn , os quais formam o rdn de uma entrada de diretório, e clique em Procurar.


Figura 7. Procurando pode uma entrada de diretório
Procurando pode uma entrada de diretório

Os atributos da entrada de diretório são listados.


Figura 8. Resultado da procura de entrada de diretório
Resultado da procura de entrada de diretório



Voltar para parte superior


Excluindo uma Entrada de Diretório

Nesta seção, exclua uma entrada de diretório. Uma entrada de diretório é identificada por um DN, o qual é composto de rdn e o DN base. O RDN da entrada de diretório a ser modificado é especificado no modelo de visualização delete_entry.rhtml. O método form_tag é usado para criar um formulário, e a tag text_field é usada para criar um campo de texto de formulário. O modelo de visualização delete_entry.rhtml, o qual consiste em campos de entrada para o primeiro nome e o último nome, é mostrado abaixo.


Lista 4. delete_entry.rhtml
    
<html>
<body>

<div>
                <table border='0' cellspacing='0' cellpadding='5'>
                        <tr>
                                <caption>
                                        Delete Entry
                                </caption>
                        </tr>
                        <!-- start_form_tag -->
                        <%= form_tag :action => "delete_entry" %>
                        <tr>
                                <td>First Name*</td>
                                <td><%= text_field(:delete_entry, :gn) %></td>
                        </tr><tr>
                                <td>Last Name*</td>
                                <td><%= text_field(:delete_entry, :sn) %></td>
                        </tr><tr>
                                <td><input type="submit" value="Submit"></td>
                        </tr>
                        <%= end_form_tag %>
                </table>
        </div>
* indica um campo necessário.
</body>
</html>

Quando o formulário delete_entry.rhtml é submetido, a ação de controlador delete_entry do controlador directory é invocada. A ação de controlador delete_entry recupera os valores dos campos de formulário e cria um DN da entrada de diretório para exclusão.

values = params[:delete_entry]
    gn=values[:gn]
    sn= values[:sn]
    cn=gn+sn
    dn="cn="+cn+",cn=localhost"
        

Abra uma conexão com o servidor de diretório e exclua a entrada de diretório com o método delete da classe Net::LDAP.

Net::LDAP.open( :host => 'localhost', :port => 389,
:base => 'cn=localhost', :auth => { :method => :simple, :username =>
'cn=root', :password => 'tivoli' } ) do |ldap|
     ldap.delete :dn => dn
 end

Para excluir uma entrada de diretório, invoque o modelo de visualização delete_entry.rhtml com a URL http://localhost:3000/directory/delete_entry.rhtml. Especifique os atributos :gn (primeiro nome) e :sn (último nome) da entrada de diretório para exclusão e, em seguida, clique em Submeter.


Figura 9. Excluindo uma entrada de diretório
Excluindo uma entrada de diretório

A entrada de diretório é excluída, conforme mostrado na Ferramenta de Administração da Web.


Figura 10. Ferramenta de Administração da Web com a entrada de diretório excluída
Ferramenta de Administração da Web com a entrada de diretório excluída

O script de controlador directory_controller.rb é mostrado abaixo.


Listagem 5. directory_controller.rb
    
require 'net/ldap'

class DirectoryController < ApplicationController

def add_entry

    values = params[:add_entry]
    gn=values[:gn]
    sn= values[:sn]
    cn=gn+sn

     dn="cn="+cn+",cn=localhost"

     title=values[:title]
     telephoneNumber=values[:telephoneNumber]
     physicalDeliveryOfficeName=values[:physicalDeliveryOfficeName]
     facsimileTelephoneNumber=values[:facsimileTelephoneNumber]

     attr = {
   :cn => cn,
   :objectclass => ['top', 'person', 'organizationalPerson'],
   :sn => sn,
   :title => title,
   :telephoneNumber => telephoneNumber,
   :physicalDeliveryOfficeName => physicalDeliveryOfficeName,
   :facsimileTelephoneNumber => facsimileTelephoneNumber
    }



Net::LDAP.open( :host => 'localhost', :port => 389,:base =>
'cn=localhost', :auth => { :method => :simple, :username => 'cn=root',

:password => 'tivoli' } ) do |ldap| ldap.add( :dn => dn, :attributes => attr ) end end def delete_entry values = params[:delete_entry] gn=values[:gn] sn= values[:sn] cn=gn+sn dn="cn="+cn+",cn=localhost" Net::LDAP.open( :host => 'localhost', :port => 389,:base => 'cn=localhost', :auth => { :method => :simple, :username => 'cn=root',
:password => 'tivoli' } ) do |ldap| ldap.delete :dn => dn end end def search_entry gn=params[:firstName] sn= params[:lastName] cn=gn+sn treebase= "cn="+cn+",cn=localhost" attrs = ["cn", "sn","title", "telephoneNumber","physicalDeliveryOfficeName", "facsimileTelephoneNumber"] directoryEntry="<table border><tr><th>Attribute</th> ;<th>Value</th></tr>" Net::LDAP.open( :host => 'localhost', :port => 389,:base => 'cn=localhost', :auth => { :method => :simple, :username => 'cn=root',
:password => 'tivoli' } ) do |ldap| ldap.search( :base => treebase, :attributes => attrs, :return_result => true ) do |directory| directoryEntry+="<tr>" directoryEntry+="<td>cn</td>" directoryEntry+="<td>"+"#{directory.cn}"+"</td>" directoryEntry+="</tr>" directoryEntry+="<tr>" directoryEntry+="<td>sn</td>" directoryEntry+="<td>"+"#{directory.sn}"+"</td>" directoryEntry+="</tr>" directoryEntry+="<tr>" directoryEntry+="<td>title</td>" directoryEntry+="<td>"+"#{directory.title}"+"</td>" directoryEntry+="</tr>" directoryEntry+="<tr>" directoryEntry+="<td>telephoneNumber</td>" directoryEntry+="<td>"+"#{directory.telephoneNumber}"+"</td>" directoryEntry+="</tr>" directoryEntry+="<tr>" directoryEntry+="<td>physicalDeliveryOfficeName</td>" directoryEntry+="<td>"+"#{directory.physicalDeliveryOfficeName}"+"</td>" directoryEntry+="</tr>" directoryEntry+="<tr>" directoryEntry+="<td>facsimileTelephoneNumber</td>" directoryEntry+="<td>"+"#{directory.facsimileTelephoneNumber}"+"</td>" directoryEntry+="</tr>" end directoryEntry+="</table>" render:text=> directoryEntry end end def modify_entry values = params[:modify_entry] gn=values[:gn] sn= values[:sn] cn=gn+sn dn="cn="+cn+",cn=localhost" title=values[:title] telephoneNumber=values[:telephoneNumber] physicalDeliveryOfficeName=values[:physicalDeliveryOfficeName] facsimileTelephoneNumber=values[:facsimileTelephoneNumber] Net::LDAP.open( :host => 'localhost', :port => 389,:base => 'cn=localhost', :auth => { :method => :simple, :username => 'cn=root',
:password => 'tivoli' } ) do |ldap| ldap.replace_attribute dn, :title, title ldap.replace_attribute dn, :telephoneNumber, telephoneNumber ldap.replace_attribute dn, :physicalDeliveryOfficeName, physicalDeliveryOfficeName ldap.replace_attribute dn, :facsimileTelephoneNumber, facsimileTelephoneNumber end end end



Voltar para parte superior


Sumário

Neste artigo, você instalou o Ruby on Rails e o Net::LDAP Ruby gem. Você aprendeu a criar uma entrada de diretório no Tivoli Directory Server V6.0, em seguida, modificou a entrada de diretório, procurou a entrada de diretório e excluiu a entrada de diretório, tudo com a linguagem de script Ruby.

O Ruby é compatível com PHP, a linguagem de script mais usada, em sua aplicação para desenvolver serviços de diretórios LDAP. De acordo com o TIOBE Programming Community Index, o uso do Ruby cresceu no ano passado.




Voltar para parte superior


Download

DescriçãoNomeTamanhoMétodo de download
LDAP applicationos-ldap-tivoli-ruby_ldap-app.zip29KBHTTP
Informações sobre métodos de download


Recursos

Aprender

Obter produtos e tecnologias

Discutir


Sobre o autor

Deepak Vohra is a Sun Certified Java Programmer and Web Component Developer. Deepak has published in XML Journal, onjava.com and WebLogic Developer's Journal




Avalie esta página


Reserve um instante para completar este formulário para nos ajudar a servi-lo melhor.



 


 


Não
são úteis
Extremamente
úteis
 






Voltar para parte superior