Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Utilizo uma classe, criada por mim, em php para incluir e modificar dados dos usuários no AD.
Por exemplo
$info['dn'] = 000001; //Nome único no sistema, basicamente o ID
$info['displayname'] = 'Gabriel Heming';//Nome completo
$info['givenname'] = 'Gabriel';//Primeiro Nome
$info['description'] = 'Descrição';//Descrição
$ldap = ldap_connect( $ad );
ldap_modify( $ldap, $info['dn'], $info );
O código acima funciona perfeitamente para modificar os campos. A classe funcionaria perfeitamente se não fosse um contra-tempo, que é o seguinte.
Sempre que eu tento modificar um campo para null
$info['description'] = null;//Campo null
ou vazio
$info['description'] = '';//Campo vazio
e utilizar a função ldap_modify, a alteração não pode ser concluída por haver campos nulos, e para eu remover os valores eu tenho que fazer da seguinte maneira.
$info['description'] = ' ';//Campo com um espaço em branco
Porém o sistema desktop do AD permite apagar completamente os dados dos campos, só não consigo fazer isso pelo php.
Alguem saberia me dizer como posso remover os valores dos campos, se há outra função além da ldap_modify?
Consegui encontrar uma solução. Mas como todas as soluções que envolvem a Microsoft, não me agradou nem um pouco.
Para eu remover qualquer atributo de uma entrada no Active Directory eu preciso re-enviar o mesmo valor e usar um comando para remover. É um absurdo ter que reenviar o mesmo valor, uma vez que deveria ser somente definir o atributo como null.
Segue o código que eu acho que um dia será útil para alguem.
Para inserir/modificar itens no AD usa-se assim:
$dn = 000001; //Nome único no sistema, basicamente o ID
$info['displayname'] = 'Gabriel Heming';//Nome completo
$info['givenname'] = 'Gabriel';//Primeiro Nome
$info['description'] = 'Descrição';//Descrição
//Essa é a melhor parte, pois pode-se inserir e modificar funções pela mesma função.
Para adicionar itens a listas (como por exemplo: lista de telefones )
Aqui já me complicou um pouco, pois em muitos exemplos, era somente passar um vetor pelo ldap_modify. Fiz os testes e nenhum funcionou \o/.
Vejamos o exemplo:
$dn = 000001; //Nome único no sistema, basicamente o ID
$ldap = ldap_connect( $ad );
//Isso mesmo, somente uma inserção por vez. No AD ele cria um vetor, mas cada item deve ser inserido um de cada vez.
E por fim, o pior de todos =(
Para remover um atributo, eu tenho que passar qual é o valor do atributo (ao menos não é case sensitive).
Vamos ao exemplo:
/*
Possuo esses atributos na entrada do AD. Se eu quiser remover a descrição, tenho que proceder da seguinte forma.
$info['displayname'] = 'Gabriel Heming';//Nome completo
$info['givenname'] = 'Gabriel';//Primeiro Nome
$info['description'] = 'Descrição';//Descrição
*/
$dn = 000001; //Nome único no sistema, basicamente o ID
//Atento que eu tenho que passar que está escrito "Descrição" no atributo para eu poder apagar ele.
$info['description'] = 'Descrição'
Enfim, é assim e não tenho outra escolha a não ser seguir o que foi definido =(