 | 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.
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 applicationname | Cria 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 modelname | Gera 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.
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:
- 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.
- Clique duas vezes no aplicativo ruby185-21.exe . O Assistente de Configuração do Ruby será iniciado.
- 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.
- Especifique um diretório para instalação do Ruby (o padrão é c:/ruby) e clique em Avançar.
- Clique em Instalar. Ruby e RubyGems serão instalados.
Rails
Instalar o Rails:
- Altere o diretório (
Cd) para o diretório c:/ruby, no qual o Ruby está instalado.
- 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étodo | Descriçã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.
|
 |
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:
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.
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 Texto | Atributo |
|---|
| 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
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
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
Os atributos da entrada de diretório incluída são exibidos.
Figura 4. Exibindo atributos para
a entrada de diretório
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
A entrada de diretório é modificada conforme mostrada na Ferramenta de Administração da Web.
Figura 6. Entrada de diretório modificada
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
Os atributos da entrada de diretório são listados.
Figura 8. Resultado da procura de entrada de diretório
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
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
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
|
 |
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.
Download | Descrição | Nome | Tamanho | Método de download |
|---|
| LDAP application | os-ldap-tivoli-ruby_ldap-app.zip | 29KB | HTTP |
|---|
Recursos Aprender
-
"Introdução
ao LDAP, Parte 2: LDAP e WebSphere" explica como o LDAP fornece um excelente mecanismo de autenticação para o WebSphere Application Server.
-
Tenha uma visão geral sobre o
Tivoli Directory Server e aprenda sobre os recursos, benefícios, requisitos do sistema, suporte ao produto e mais.
-
Aprenda sobre e faça o download do
Ruby on Rails, a estrutura Web de software livre otimizada para felicidade dos programadores
e produtividade sustentável.
-
"An
introduction to Ruby on Rails for DB2 developers" explica como acelerar o desenvolvimento de seus aplicativos da Web com base no DB2 usando a estrutura Web do Ruby on Rails.
-
Consulte o TIOBE Programming
Community Index para ver como o uso do Ruby cresceu no ano passado.
-
"Fast-track your Web apps with Ruby on Rails" apresenta o Ruby on Rails, detalha os componentes e mostra como ele funciona.
-
Para ouvir interessantes entrevistas e discussões para desenvolvedores de software, consulte podcasts developerWorks.
-
Fique atualizado com os Eventos e Webcasts Técnicos do developerWorks.
-
Acompanhe o developerWorks no Twitter.
-
Confira as próximas conferências, feiras de exposições, webcasts e outros Eventos em todo o mundo que são de interesse aos desenvolvedores de software livre da IBM.
-
Visite a Zona de Software Livre do developerWorks para obter instruções amplas, ferramentas e atualizações de projetos para ajudá-lo a desenvolver com tecnologias de software livre e usá-las com os produtos da IBM.
-
Assista e aprenda sobre as tecnologias IBM e de software livre e as funções dos produtos com demonstrações gratuitas do developerWorks On demand.
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
|  |