Vous êtes sur la page 1sur 8

Pessoal estou inserindo no blog uma classe para manipulao do MS Active directory bem simples e funcional, depois que

e criei no preciso mais ficar esquentando a cabea com login e permisso de grupo na minha aplicao. Qualquer duvida s postar. <?php class adLDAP{ protected static $permissao_grupo = false; protected static $pertence_grupo = false; public static function Login($ldapdsn, $array_grupo = null) { if($ldapdsn['conexao']){ $filtro = "(&(objectCategory=person)(sAMAccountName=".$ldapdsn['usuario']."))"; $atributo = array('dn','mail','memberof'); $dados_login = adLDAP::search($ldapdsn['conexao'], $ldapdsn['basedn'], $filtro, $atributo); if($dados_login){ if(!empty($array_grupo)){ if(!empty($dados_login[0]['memberof'])){ foreach ($dados_login[0]['memberof'] as $chave => $valor){ if($chave !== 'count'){ $cngrupo = explode(',',$valor); $nomegrupo = explode('=',$cngrupo[0]); if(in_array($nomegrupo[1], $array_grupo)){ adLDAP::$permissao_grupo = true; } } } if(adLDAP::$permissao_grupo){ return $dados_login;

}else{ return false; } }else{ return false; } }else{ return $dados_login; } }else{ return false; } }else{ return false; } } public static function search($conexao, $basedn, $filtro, $atributo = null){ if(empty($atributo)){ $pesquisa = @ldap_search($conexao, $basedn, $filtro) or die(false); }else{ $pesquisa = @ldap_search($conexao, $basedn, $filtro, $atributo) or die(false); } if($pesquisa){ $TotalReg = @ldap_get_entries($conexao, $pesquisa); return $TotalReg; }else{ return false; } } public static function searchCustom($conexao, $basedn, $objectCategory, $objectProperties, $objectPropertiesValue, $atributo = null){ //$conexao: Conexo Ldap

//$basedn: Dn principal de busca, no caso do ad do google ou=outeste,dc=teste,dc=local //$objectCategory: a categoria de busca do objeto dentro do AD ex: groups(buscar por grupos), person(Pessoas), ou(Ous) //$objectProperties: a propriedade da categoria a ser pesquisada ex: para grupos pode ser name, para usuarios samAccountName e etc. //$objectPropertiesValue: o valor a ser pesquisado (*) pesquisa tudo, ou podemos especificar o valor referente ao $objectProperties como name a ser pesquisado ou o samAccountName. //$atributo = Atributos de retorno da pequisa, esta variavel deve ser preenchida e separada por virgula; if(!empty($objectCategory) && !empty($objectProperties) && !empty($objectPropertiesValue)){ $filtroBuscaAd = "(&(objectCategory=".$objectCategory.")(".$objectProperties."=".$objectProp ertiesValue."))"; if(empty($atributoAd)){ $arrayAributos = explode(',',$atributo); $pesquisa = ldap_search($conexao, $basedn, $filtroBuscaAd, $arrayAributos) or die(false); }else{ $pesquisa = ldap_search($conexao, $basedn, $filtroBuscaAd) or die(false); } }else{ return false; } if($pesquisa){ $TotalReg = ldap_get_entries($conexao, $pesquisa); return $TotalReg; }else{ return false; } } public function Logout() {

} public static function pesquisaMembrosGrupo($conexao, $basedn, $nomeGrupo){ $filtro = "(&(objectClass=group)(cn=".$nomeGrupo."))"; $atributo = array('dn','cn','member'); $membros = adLDAP::search($conexao, $basedn, $filtro, $atributo); if($membros){ if(isset($membros[0]['member']) && !empty($membros[0]['member'])){ return $membros ; }else{ return false; } }else{ return false; } } public static function eMembroDoGrupo($conexao, $basedn, $nomeGrupo, $usuario){ $array_usuario = explode('@', $usuario); $usuario = $array_usuario[0]; $filtro = "(&(objectCategory=person)(sAMAccountName=".$usuario."))"; $atributo = array('dn','mail','memberof'); $dados_login = adLDAP::search($conexao, $basedn, $filtro, $atributo); if(!empty($dados_login[0]['memberof'])){ foreach ($dados_login[0]['memberof'] as $chave => $valor){ if($chave !== 'count'){ $cngrupo = explode(',',$valor); $nomegrupo = explode('=',$cngrupo[0]); if($nomegrupo[1] == $nomeGrupo){ adLDAP::$pertence_grupo = true; } } } if(adLDAP::$pertence_grupo){ return true; }else{

return false; } }else{ return false; } } public function CriarUsuarioAd($conexao, $dadosUsuario){ $usuarioAd = explode('@', $dadosUsuario['email']); $ouUsuario = self::PesquisaOU($conexao, $dadosUsuario['basedn'], $dadosUsuario['instituto']); if($ouUsuario) { $dn_ldap = 'cn='.$usuarioAd[0].',ou='.$dadosUsuario['instituto'].', '.$dadosUsuario['basedn']; } else { $dn_ldap = 'cn='.$usuarioAd[0].', '.$dadosUsuario['basedn']; } $testeSenha = self::converteSenhaPadraoAd($dadosUsuario['senha']); $ldaprecord['objectclass'][0] = "top"; //Obejto fixo e obrigatorio para criao de usuario $ldaprecord['objectclass'][1] = "person"; //Obejto fixo e obrigatorio para criao de usuario $ldaprecord['objectclass'][2] = "organizationalPerson"; //Obejto fixo e obrigatorio para criao de usuario $ldaprecord['objectclass'][3] = "user"; //Obejto fixo e obrigatorio para criao de usuario $ldaprecord['pager'] = $dadosUsuario['cpf']; $ldaprecord['company'] = $dadosUsuario['instituto']; ///Esse dado ainda no esta vindo do cadprof por isso esta comentado, quando disponivel apenas descomente a linha $ldaprecord["displayName"] = $dadosUsuario['nome']." ".$dadosUsuario['sobrenome']; $ldaprecord["givenName"] = $dadosUsuario['nome']; $ldaprecord["mail"] = $dadosUsuario['email']; $ldaprecord["name"] = $usuarioAd[0]; //igual a cn $ldaprecord["sAMAccountName"] = $usuarioAd[0]; //este nome deve ser unico assim como a cn $ldaprecord["sn"] = $dadosUsuario['sobrenome'];

$ldaprecord["userPrincipalName"] = $usuarioAd[0]."@".$dadosUsuario['dominio']; // este nome deve ser unico assim como a cn $ldaprecord["userAccountControl"] = 66080;// Cria conta com usuario habilitado e a senha nunca expira $ldaprecord["pwdLastSet"] = -1;// sem troca de senha no proximo logon $ldaprecord["unicodepwd"]= self::converteSenhaPadraoAd($dadosUsuario['senha']); //senha ja convertida para padrao AD ldap_set_option($conexao, LDAP_OPT_REFERRALS, 0); $resposta = @ldap_add($conexao, $dn_ldap, $ldaprecord) or die(false); if($resposta){ return $resposta; }else{ throw new Exception('Erro ao criar usuario no AD Classe Ldap'); } } static function DeletarUsuarioAd($conexao, $dadosUsuario){ $usuarioAd = explode('@', $dadosUsuario['email']); $ouUsuario = self::PesquisaOU($conexao, $dadosUsuario['basedn'], $dadosUsuario['instituto']); if($ouUsuario) { $dn_ldap = 'cn='.$usuarioAd[0].',ou='.$dadosUsuario['instituto'].', '.$dadosUsuario['basedn']; } else { $dn_ldap = 'cn='.$usuarioAd[0].', '.$dadosUsuario['basedn']; } $retorno = @ldap_delete($conexao, $dn_ldap); if($retorno){ return $retorno; }else{ throw new Exception('erro ao remover usuario do AD'); } } static function alteraSenhaAd($conexao, $cn, $senha)

{ ldap_set_option($conexao, LDAP_OPT_REFERRALS, 0); $Arraysenha['unicodepwd'] = self::converteSenhaPadraoAd($senha); $resultado = @ldap_modify($conexao, $cn, $Arraysenha); if($resultado){ return true; }else{ return false; } } static function converteSenhaPadraoAd($senha){ if(!empty($senha)){ //$senha_padrao_ad = null; //codigo para alterao de senha no AD em verses anteriores a win2003 server /* $len = strlen($senha); for($i=0;$i<$len;$i++){ $senha_padrao_ad .= "{$senha{$i}}\000"; }*/ $senha = "\"". $senha . "\""; $senha_padrao_ad = mb_convert_encoding($senha, "UTF-16LE"); return $senha_padrao_ad; }else{ return false; } } static function PesquisaOU($conexao, $basedn, $instituto){ $filtro = '(&(objectClass=organizationalUnit)(ou='.$instituto.'))'; $atributo = ""; $ou = self::search($conexao, $basedn, $filtro, $atributo); if($ou){ if(!empty($ou['count'])){ return $ou; }else{ return false; } }else{ return false;

} } } ?>

Vous aimerez peut-être aussi