Abuuritaanka tusaha ciwaanka webka PHP + LDAP

Waxa dhacday in olole balaadhan (marka la eego) uu lahaa xafiisyo badan oo fogfog oo leh tiro fiican oo isticmaaleyaal ah. Dhammaan xafiisyadu waxay ku xidhan yihiin hal shabakad oo leh aag guud, xafiis kasta waxaa lagu qeexay Hagaha Firfircoon (oo hadda ka dib AD) Unugga Ururka (OU), kaas oo isticmaalayaasha hore loo abuuray.

Waxay ahayd lagama maarmaan in la siiyo dadka isticmaala fursad ay si degdeg ah oo aan dadaal lahayn u helaan macluumaadka xiriirka ee shaqaalaha looga baahan yahay AD, iyo maamulayaasha nidaamka lacag la'aan ah oo ka soo caadiga ah ee tafatirka file qoraal ah oo ciyaaray doorka buugga cinwaanka.

Ma jirin doorashooyin ku habboon oo diyaarsan oo lagu xallinayo dhibaatada, markaa waa inaan wax walba ku sameeyo gacmahayga iyo madaxayga.

Aynu ku bilowno xaqiiqda ah in marka hore aad u baahan tahay inaad go'aansato waxa aad isticmaalayso, way fududahay - tusaha ugu dambeeya waa inuu ahaadaa mid ay heli karaan dhammaan isticmaalayaasha domainka iyada oo loo marayo browserka. Waxa ugu horreeya ee maskaxda ku soo dhaca waa PHP oo ay la socdaan ldap, waanan isticmaali doonnaa. Waxaan u arkaa faa'iidada weyn ee isticmaalka PHP inay tahay fududaanteeda qaraabada ah - maamule kasta oo nidaam leh xitaa wax yar ayaa awoodi doona inuu sameeyo isbeddellada lagama maarmaanka ah ee koodka, haddii loo baahdo, iyada oo aan si gaar ah loo adkeyn.

Markaa, aan bilowno. Marka hore, aynu dejinno cabbirada ku xidhidhiyaha bogga:

$srv ="SERVER";
$srv_domain ="DOMAIN.COM";
$srv_login ="USERNAME@".$srv_domain; 
$srv_password ="PASSWORD";

Qodobka xiga waa in la go'aamiyo OU-da aan ku raadin doono isticmaalayaasha. Waxaan tan sameyn doonaa annagoo dhexda ka gelinaya qiyamka $_GET['meel']. Tusaale ahaan, haddii isticmaaluhu uu tago cinwaanka server/index.php?goob=ugu horeysay, ka dibna doorsoomayaasha $ meel waxaa loo qoondayn doonaa qiimaha ugu horeysay.

$place = (@$_GET['place']);
$doscript=true;
switch($place){ 
case "first" :
	$dn ="OU=ou1,OU=DOMAIN,dc=DOMAIN,dc=COM";			
	break;
case "second":
	$dn ="OU=ou2,OU=DOMAIN,dc=DOMAIN,dc=COM";			
	break;
	//здесь можно добавить ещё условий.
default:
	$doscript=false; 
	break;
}
if (!$doscript) include "main_table.html";

Isbadal $doscript ayaa loo baahan yahay si loo kaydiyo qiimaha - haddii aan qeexnay OU-ka kaas oo aan ku raadin doono isticmaalayaasha iyo haddii kale. Haddii aysan jirin wax u dhigma oo ku qoran "switch-case", ka dib $doscript=been, qaybta ugu weyn ee qoraalka lama fulin doono, waxaana la soo bandhigi doonaa bogga bilowga "main_table.html" (waxaan kaaga sheegi doonaa wax ku saabsan). waa dhamaadka).

Haddii aan qeexnay OU, ka dib waxaan sii wadnaa ficillo dheeraad ah: waxaan bilaabeynaa inaan u sawirno isticmaalaha bogga hagaha:

else if ($doscript) {
{echo "
<!DOCTYPE html> 
<html xmlns='http://www.w3.org/1999/xhtml'>
<head>
<link rel='shortcut icon' href='ico.png'>
<meta charset='windows-1251/ '>

Waxaan ku darnaa qaabab muuqaal wanaagsan leh (haa, waxaa lagu dari karaa faylka css, laakiin noocyada IE qaarkood ma rabaan inay aqbalaan qaababka loo dejiyay habkan, markaa waa inaad si toos ah ugu qortaa qoraalka):

<style>
	*{text-align: center; font-family:tahoma; font-size:14px;}
	a{text-decoration: none; color: #000;}
	a:hover{text-decoration: underline; color: #0059FF;}
	#bold{text-decoration: none; font-weight: 600;font-size:20px;}
	#table,tr,td{border-style:solid;border-width:1px;	border-collapse:collapse;padding:5px; height:22px;border-color:#7d7d7d;}
	/* Нечетные строки */#table tbody tr:nth-child(odd){background: #fff;}
	/* Четные строки */   #table tbody tr:nth-child(even){background: #F7F7F7;}	
	#noborder{border-width: 0 px; border-style: none;}	
	#sp30px{text-indent: 30px;text-align: justify;}
	#smallsize{font-family:tahoma; text-indent: 5px; text-align:left; font-size:12px;}
	#top {background: #ffffff;
		text-align: center;
		left:0;
		top:0px;
		table-layout: fixed;
		border-style:solid;
		border-width:0px;
		border-collapse:collapse;
		padding:0px;
		height:22px;
		border: 0px;
		z-index: 99999;
		display:block;
		width:80px;
		opacity: 0.6;
		filter: alpha(Opacity=60);
		height:100%;
		position:fixed;}
	#top:hover{background: #afafaf;opacity: 100;filter: alpha(Opacity=100);text-decoration: none;color: #000000;}
	.smalltext{padding-top: 1px;
		padding-bottom: 1px;
		text-align: bottom;
		font-family:tahoma;
		color: #a0a0a0;
		line-height: 7px;
		font-size: 10px;}
	.smalltext:hover{color: #0000ff;}		
	.transition-rotate {position: relative;
		z-index: 2;
		margin: 0 auto;
		padding: 5px;
		text-align: center;
		max-width: 500px;
		cursor: pointer;
		transition: 0.1s linear;}
	.transition-rotate:hover {-webkit-transform: rotate(-2deg);	transform: rotate(-2deg);}
	#lineheight{
		text-align: left;
		line-height: 1px;
		text-decoration: none;
		font-weight: 600;
		font-size:20px;}
</style>

Waxaan ku dhammaysannay qaababka, hadda waxaan ku qornaa cinwaanka tab oo aan sawirnaa xiriir ku habboon si aan ugu laabto bogga ugu weyn:

<title>Adressbook of «YourMegaCompanyName»</title>	
</head>
<body style='background-color:#ffffff;'>";
}
echo "
<table id='top'><tr><td id='top'>
<a href='index.php?place=main' id='top' >
<br><br><br>
<img src='back_to_main.png' alt='' border='0' width='75' height='60'/>
<p>На главную</p></a>
</td></tr></table>
";

Waxaan ku qeexnay filtarrada raadinta AD waxaanan helnaa xogta ku saabsan OU:

$filter ="(&(objectcategory=user)(!(userAccountControl:1.2.840.113556.1.4.803:=2)))"; //все пользователи, кроме отключенных.
$filter2 ="(objectCategory=OrganizationalUnit)"; // для получения информации о OU
$ds=ldap_connect($srv);   
if ($ds) { 
    $r=ldap_bind($ds,$srv_login,$srv_password);;     
	ldap_set_option($ds,LDAP_OPT_REFERRALS, 0);
	ldap_set_option($ds,LDAP_OPT_PROTOCOL_VERSION,3);
	$sr=ldap_search($ds,$dn ,$filter );   
    ldap_sort($ds,$sr, "givenname");
    $info = ldap_get_entries($ds, $sr); 
    $sr2=ldap_search($ds,$dn ,$filter2 );   
    $placeinfo = ldap_get_entries($ds, $sr2); 
$PlaceName = $placeinfo[0]["l"][0];  			// name of place
$PlaceAddres = $placeinfo[0]["street"][0];		// address of place
$PlaceMail = $placeinfo[0]["description"][0]; 	// mail of place
$PlacePhone = $placeinfo[0]["st"][0]; 		// phone of plase

Marka xigta waxaanu naqshadeynaa dusha sare ee bogga:

echo"<table align='center' height = '80'>
	<td id='noborder' ><div id='lineheight'>". $PlaceName ."</div></td></tr>
	<tr><td id='noborder' >". $PlaceAddres ."</td></tr>
    </table>
<table align='center' id='table'>
	<tr><td width='35' bgcolor = #f0f0e4>  № </td>
	<td width='300' bgcolor = #f0f0e4> Name </td>
	<td width='250' bgcolor = #f0f0e4> E-mail </td>
	<td width='60' bgcolor = #f0f0e4> Phone </td>
	<td width='150' bgcolor = #f0f0e4> Mobile </td></tr>
	<tr><td></td><td> Данные OU </td><td>";
echo "<div class='transition-rotate'><a href=mailto:" . $PlaceMail .">" . $PlaceMail ." </a></div>";
echo "</td><td width='150'> " . $PlacePhone ." </td><td> - </td></tr>";

Marka xigta, waxaan ku helnaa oo ku socodsiineynaa xogta isticmaalaha si loop ah, halka si aan u qarino qaar ka mid ah xisaabaadka (tusaale ahaan, adeegga), waxaan si fudud u galeynaa "qarin" goobta "qolka" faahfaahinta isticmaalaha ee AD, isticmaalayaasha noocaas ah ma noqon doonaan lagu soo bandhigay tusaha:

for ($i=0; $i<$info["count"];$i++) { 
$UserHide = $info[$i]["physicaldeliveryofficename"][0];
if ($UserHide != 'hide') {
$UserName = $info[$i]["cn"][0];                //Имя пользователя
$UserPosition = $info[$i]["title"][0]; 		// Должность
$UserMail = $info[$i]["mail"][0];			//mail
if (!$UserMail)) $UserMail = "-";                  //если нет данных о ящике в AD, то отображаем прочерк
$UserIpPhone = $info[$i]["ipphone"][0];		//ip phone
	if (!$UserIpPhone) $UserIpPhone = "-";    //если нет данных о ящике в AD, то отображаем прочерк
$UserMobile = $info[$i]["mobile"][0];		//mobile
	if (!$UserMobile) $UserMobile = "-";     //если нет данных о ящике в AD, то отображаем прочерк

By habka, haddii aad u baahan tahay si aad u hesho qiimaha sifo kale, ka dibna xusuusnow (tani waa muhiim):
codsiga waxaan ku gudbineynaa magaca sifada far yar xarfo, haddii kale ma shaqayn doonto.

Oo geli xogta la helay shaxda:

    echo "<tr>
	<td>". $n+=1 ."</td>
	<td> ". $UserName ."<br> <div class='smalltext'>". $UserPosition ."</div></td><td>"; //	Имя пользователя и должность 
	if ($UserMail !='-') echo "<div class='transition-rotate'><a href=mailto:'$UserMail'>$UserMail  </a></div>";    // если у пользователя есть e-mail создаём ссылку на отправку письма
	else echo "-"; //если нет e-mail - ставим прочерк.
 	echo "<td> ". $UserIpPhone ." </td>
 	<td> ". $UserMobile ." </td></tr>";
	}
}
echo "</table>";

Marka xigta, waxaan xireynaa xiriirka ldap, ama muujineynaa fariin ku saabsan suurtogalnimada in lagu xiro serverka:

ldap_close($ds); 
} 
else echo "<h4>Unable to connect to LDAP server</h4>"; 
echo '<br><br><br></body></html>';}

Faylka "main_table.html" gudaha waa bog html fudud oo leh xiriirin, wuxuuna u egyahay sidan:

<head>
<link rel="shortcut icon" href="ico.png"/>
<meta charset="windows-1251"/>
<title>Adressbook of «YourMegaCompanyName»</title>
</head>
<body style='background-color:#ffffff;'>
<center><a href=index.php><IMG border="none" src="logo.png"/></a></center>
<center><b>Places and offices</b></center>
<br>
<table border="0" width="450" bgcolor="#dddddd" align="center" valign="middle" CELLSPACING="0">

<tr id="space"><td></td></tr>
<tr><td align="left" id="abz"><a href="index.php?place=ou1">OU1</a></td></tr>
<tr id="space"><td></td></tr>
<tr><td align="left" id="abz"><a href="index.php?place=ou2">OU2</a></td></tr>

</table></body></html>

Haddii koodkaygu qof caawiyo, waan ku farxi doonaa, isticmaal!

Waxa kale oo aad si xor ah u tafatir kartaa sidaad rabto (hagaajin/xun) oo u qaybin si kasta.

Qalbadda

Source: www.habr.com

Add a comment